Chạy vào một số sự cố với nhiều biểu mẫu trên một chế độ xem.Nhiều biểu mẫu trong chế độ xem MVC: ModelState áp dụng cho tất cả các hình thức
Giả sử tôi có viewmodel sau:
public class ChangeBankAccountViewModel
{
public IEnumerable<BankInfo> BankInfos { get; set; }
}
public class BankInfo
{
[Required]
public string BankAccount { get; set; }
public long Id { get; set; }
}
Trong viewmodel của tôi, tôi muốn tất cả BankInfos sẽ được hiển thị bên dưới eachother, bên trong các hình thức riêng biệt cho mỗi.
Để đạt được điều này, tôi đang sử dụng một cái nhìn _EditBankInfo phần:
@model BankInfo
@using (Html.BeginForm())
{
@Html.HiddenFor(m => m.InvoiceStructureId)
@Html.TextBoxFor(m => m.IBANAccount)
<button type="submit">Update this stuff</button>
}
Cũng như xem BankInfo thực tế của tôi:
foreach(var info in Model.BankInfos)
{
Html.RenderPartial("_EditBankInfo", info);
}
ngoái, đây là 2 phương pháp hành động của tôi:
[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();
}
Tất cả điều này là làm việc hunky dory: Xác thực hoạt động trơn tru, đăng mô hình được công nhận và xác nhận chính xác ... Tuy nhiên, khi tải lại trang là khi sự cố phát sinh. Vì tôi đang sử dụng cùng một biểu mẫu nhiều lần, ModelState của tôi sẽ được áp dụng nhiều lần. Vì vậy, khi thực hiện cập nhật trên một biểu mẫu, trang tiếp theo tải tất cả chúng sẽ có các giá trị được đăng.
Có cách nào để dễ dàng ngăn điều này xảy ra không?
Tôi đã thử thực hiện nó mà không cần quan sát một phần, nhưng vít đặt tên lên một chút (chúng là duy nhất, nhưng modelide ràng buộc sẽ không nhận ra chúng).
Cảm ơn mọi câu trả lời.
Bạn có thể hiển thị hành động của bộ điều khiển mà biểu mẫu được gửi không? Tôi đặc biệt quan tâm đến mô hình mà nó lấy làm tham số và mô hình nó chuyển đến khung nhìn. –
@DarinDimitrov, Đã thêm chúng. Do biết đây là một ví dụ đơn giản, nhưng thiết lập cơ bản nên ở đó. Ngoài ra, tôi có thể sẽ sử dụng một số loại kịch bản PRG ở đây. – Kippie