簡體   English   中英

MVC4 Formcollection不刷新?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM