Występuje problem z wieloma formularzami w jednym widoku.Wiele formularzy w widoku MVC: ModelState zastosowany do wszystkich formularzy
Załóżmy, że mam następujący ViewModel:
public class ChangeBankAccountViewModel
{
public IEnumerable<BankInfo> BankInfos { get; set; }
}
public class BankInfo
{
[Required]
public string BankAccount { get; set; }
public long Id { get; set; }
}
W moim viewmodel, chcę wszystkie BankInfos być wyświetlane pod siebie, wewnątrz oddzielnych formularzach dla każdego.
Aby to osiągnąć, używam częściowego _EditBankInfo wyświetlania:
@model BankInfo
@using (Html.BeginForm())
{
@Html.HiddenFor(m => m.InvoiceStructureId)
@Html.TextBoxFor(m => m.IBANAccount)
<button type="submit">Update this stuff</button>
}
jak również mojego prawdziwego BankInfo wyświetlania:
foreach(var info in Model.BankInfos)
{
Html.RenderPartial("_EditBankInfo", info);
}
ostatni, tutaj są moje 2 METODY DZIAŁANIA:
[HttpGet]
public ActionResult BankInfo()
{
return View(new ChangeBankAccountViewModel{BankInfos = new [] {new BankInfo...});
}
[HttpPost]
public ActionResult BankInfo(BankInfo model)
{
if(ModelState.IsValid)
ModelState.Clear();
return BankInfo();
}
Wszystko to działa hunky dory: Walidacja działa sprawnie, opublikowany model zostaje rozpoznany i zatwierdzony poprawnie ... Jednak, gdy strona zostanie wczytana ponownie, pojawia się problem. Ponieważ używam tej samej postaci wiele razy, mój ModelState zostanie zastosowany wiele razy. Tak więc podczas wykonywania aktualizacji w jednym formularzu, następna strona załaduje wszystkie z nich będzie miała zaksięgowane wartości.
Czy istnieje sposób, aby temu zapobiec?
Próbowałem zrobić to bez częściowych widoków, ale to trochę zawraca nazwę (są unikalne, ale modelowanie w oparciu o serwery nie rozpoznaje ich).
Dzięki za wszelkie odpowiedzi.
Czy możesz pokazać działanie kontrolera, do którego formularz jest przesyłany? Szczególnie interesuje mnie model, który przyjmuje jako parametr i model, który przechodzi do widoku. –
@DarinDimitrov, Dodano. Wiedz, że jest to uproszczony przykład, ale podstawowa konfiguracja powinna tam być. Poza tym prawdopodobnie używałbym tutaj jakiegoś scenariusza PRG. – Kippie