運行了一些麻煩與一個單一的視圖多種形式。多種形式在MVC視圖:ModelState中適用於所有形式的
假設我有以下視圖模型:
public class ChangeBankAccountViewModel
{
public IEnumerable<BankInfo> BankInfos { get; set; }
}
public class BankInfo
{
[Required]
public string BankAccount { get; set; }
public long Id { get; set; }
}
在我的視圖模型,我要顯示海誓山盟下的所有BankInfos,裏面每個單獨的形式。
要做到這一點,我使用的局部視圖_EditBankInfo:
@model BankInfo
@using (Html.BeginForm())
{
@Html.HiddenFor(m => m.InvoiceStructureId)
@Html.TextBoxFor(m => m.IBANAccount)
<button type="submit">Update this stuff</button>
}
,以及我的實際看BankInfo:
foreach(var info in Model.BankInfos)
{
Html.RenderPartial("_EditBankInfo", info);
}
末,這裏是我的2種操作方法:
[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();
}
所有這一切工作虎背熊腰,腳蹬多莉:驗證工作順利,貼模型得到認可和驗證正確... 但是,當頁面重新加載是問題出現時。 因爲我多次使用相同的表單,所以我的ModelState將多次應用。因此,在一個表單上執行更新時,下一頁加載所有這些表單都將具有發佈的值。
有沒有辦法輕易地防止這種情況的發生?
我試着這樣做沒有局部的意見,但螺絲了命名位(他們是唯一的,但服務器端modelbinding將無法識別它們)。
感謝您的任何答案。
您能否顯示錶單提交到的控制器操作?我特別感興趣的是它作爲參數傳遞給模型的模型。 –
@DarinDimitrov,新增了他們。知道這是一個簡單的例子,但基本的設置應該在那裏。另外,我可能會在這裏使用某種PRG場景。 – Kippie