Tôi gặp sự cố khi xén lên dưới dạng tôi đang cố đăng. Trong trường hợp biểu mẫu không xác thực, tôi đang sử dụng tuyến đường tiêu chuẩn gọi số ModelState.AddModelError()
rồi trả lại kết quả Xem.ASP.Net MVC ModelState/Html.Tài liệu postback postback
Vấn đề là người trợ giúp HTML. * Được coi là nhận giá trị được đăng khi hiển thị và tôi nhận thấy rằng trường văn bản của tôi CHỈ làm như vậy nếu tôi đưa chúng vào danh sách tham số của hành động postback. không được yêu cầu nhìn thấy như một số hình thức có quá nhiều lĩnh vực để muốn liệt kê tất cả chúng như các tham số.
mã hành động của tôi là khoảng:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult EditDataDefinition(long? id, string name)
{
var dataDefinition = ...
// do some validation stuff
if (!ModelState.IsValid)
{
// manually set checkbox fields via ViewData seeing as this STILL doesn't work in MC 1.0 :P
// ...
return View(dataDefinition);
}
}
Bây giờ, dataDefinition (mà là một LINQ to thực thể SQL) có một trường MinVolume, được xử lý trong giao diện của dòng này:
Minimum: <%= Html.TextBox("MinVolume", null, new { size = 5 })%>
Tuy nhiên, khi chế độ xem được hiển thị sau khi xác thực ModelState không thành công, giá trị được nhập vào trang gốc mà chúng tôi đã đăng không được bảo toàn KHÔNG GIỚI THIỆU Tôi đưa nó vào làm tham số trong phương thức postback. Theo nghĩa đen, tôi có thể "giải quyết vấn đề" bằng cách thực hiện việc này:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult EditDataDefinition(long? id, string name, string minVolume)
Vì một lý do nào đó sẽ buộc giá trị trường phải được giữ nguyên. Điều này có vẻ ngu ngốc với tôi bởi vì hình thức của tôi có nhiều giá trị hơn cách đó và tôi không cần phải thêm một tham số cho trường đó.
Bất kỳ ý tưởng nào?
Không, chỉ định null là nghĩa vụ phải xác định rằng bối cảnh mô hình hiện tại nên được sử dụng để truy vấn giá trị. Chỉ định MinVolume rõ ràng và sẽ buộc giá trị đó được sử dụng thay cho giá trị đã được gửi trước đây. –
Không đúng. Chỉ định MinVolume tra cứu ViewDataDoctionary và sau đó là ModelStateDictionary cho các bài viết tiếp theo. Vì vậy, nếu Model.MinVolume là nói 5 vì chỉnh sửa, sau đó chỉ định MinVolume sẽ đặt 5 vào TextBox. Sau đó, nếu một bài viết được thực hiện (nói giá trị 3) nhưng tìm thấy không hợp lệ thì TextBox sẽ hiển thị 3 vòng 2 lần. Bạn đã thử chưa? Bạn thường chỉ định null trên chế độ xem 'Mới' hoặc 'Tạo' để bài đăng đầu tiên hiển thị trống trong trường và các bài đăng tiếp theo vẫn tiếp tục giá trị đã nhập. –
Đây chính xác là cách tôi làm điều đó và làm việc mọi lúc. Tôi không bao giờ thấy bất cứ nơi nào mà bạn phải chỉ định null. Một liên kết đến nơi bạn thấy sẽ tốt. – sirrocco