In alcuni problemi con più moduli su una singola vista.Moduli multipli in visualizzazione MVC: ModelState applicato a tutti i moduli
Supponiamo che io ho il seguente ViewModel:
public class ChangeBankAccountViewModel
{
public IEnumerable<BankInfo> BankInfos { get; set; }
}
public class BankInfo
{
[Required]
public string BankAccount { get; set; }
public long Id { get; set; }
}
Nel mio ViewModel, voglio tutti i BankInfos da visualizzare sotto vicenda, dentro le forme separate per ciascuno.
Per raggiungere questo obiettivo, sto usando una vista parziale _EditBankInfo:
@model BankInfo
@using (Html.BeginForm())
{
@Html.HiddenFor(m => m.InvoiceStructureId)
@Html.TextBoxFor(m => m.IBANAccount)
<button type="submit">Update this stuff</button>
}
Così come mio punto di vista attuale BankInfo:
foreach(var info in Model.BankInfos)
{
Html.RenderPartial("_EditBankInfo", info);
}
scorso, qui sono le mie 2 Metodi di azione:
[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();
}
Tutto questo funziona hunky dory: la convalida funziona in modo corretto, il modello pubblicato viene riconosciuto e convalidato correttamente ... Tuttavia, quando la pagina si ricarica è quando si presenta il problema. Poiché sto utilizzando lo stesso modulo più volte, il mio ModelState verrà applicato più volte. Quindi, quando si esegue un aggiornamento su un modulo, la pagina successiva carica tutti loro avranno i valori registrati.
C'è un modo per impedire facilmente che ciò accada?
Ho provato a farlo senza le viste parziali, ma questo rovina un po 'la denominazione (sono uniche, ma il modeling del server non le riconoscerà).
Grazie per eventuali risposte.
Potrebbe mostrare l'azione del controllore a cui viene inviato il modulo? Sono particolarmente interessato al modello che assume come parametro e al modello che passa alla vista. –
@DarinDimitrov, li ha aggiunti. Sappi che questo è un esempio semplificato, ma l'impostazione di base dovrebbe essere lì. Inoltre, probabilmente userò una specie di scenario PRG qui. – Kippie