[英]MVC4 Formcollection not refreshing?
我有一個具有布爾屬性的模型。 相應的視圖如下所示:
@Html.CheckBoxFor(model => model.TermsAccepted)
@Html.ValidationMessageFor(model => model.TermsAccepted)
在我的控制器中,執行以下操作:
var validator = new MyModelValidator();
var model = new MyModel()
{
TermsAccepted = bool.Parse(form["TermsAccepted"])
};
var validationResult = validator.Validate(model);
if (!validationResult.IsValid)
foreach (var error in validationResult.Errors)
warnings.Add(error.ErrorMessage);
return warnings;
第一次,我沒有單擊復選框,因為表單值為'false'並顯示了驗證消息。 我第二次單擊復選框,但是表單值現在為'true,false'並發生異常。
是否必須以某種方式清除表格?
這樣做的原因是因為Html.CheckBoxFor幫助程序會生成一個附加的隱藏字段,其名稱與復選框相同,值為false。 選中該復選框后,會將2個值發送到控制器。 默認模型綁定程序完全能夠理解和解析此值。 因此,如果您使用視圖模型而不是對此FormCollection進行一些可怕的操作並手動對其進行解析,那么一切都可以很好地工作:
[HttpPost]
public ActionResult SomeAction(MyModel model)
{
var validator = new MyModelValidator();
var validationResult = validator.Validate(model);
if (!validationResult.IsValid)
foreach (var error in validationResult.Errors)
warnings.Add(error.ErrorMessage);
...
}
無需使用任何FormCollection。 從您的代碼中刪除它。 只需將模型作為參數傳遞給操作,模型綁定器將負責其余的工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.