Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC4 Formcollection不刷新?_C#_Asp.net Mvc 4_Razor - Fatal编程技术网

C# MVC4 Formcollection不刷新?

C# MVC4 Formcollection不刷新?,c#,asp.net-mvc-4,razor,C#,Asp.net Mvc 4,Razor,我有一个具有布尔属性的模型。相应的视图如下所示: @Html.CheckBoxFor(model => model.TermsAccepted) @Html.ValidationMessageFor(model => model.TermsAccepted) 在控制器中,我执行以下操作: var validator = new MyModelValidator(); var model = new MyModel() { TermsAccepted

我有一个具有布尔属性的模型。相应的视图如下所示:

@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。从代码中删除它。只需将模型作为参数传递给操作,模型绑定器将处理其余部分。

不幸的是,我无法将模型作为参数传递,因为我的类继承自其他类,我需要使用FormCollection否,您绝对不需要使用FormCollection。您需要使用视图模型。控制器操作应始终将视图模型作为参数。视图模型是为满足给定视图的要求而专门设计的类。FormCollection不应在正确编写的ASP.NET MVC应用程序中使用。在请求中来回解析参数(与当前一样)不要使用框架中内置的东西,这让我想起了CGI的好时光:-)我知道你的意思,但我必须坚持我目前拥有的代码,除了使用formcollection,我没有其他选择。然后调用Regex向导并拆分
true,false
字符串,然后尝试将其解析为布尔值。天哪,令人难以置信的是,人们在应用程序中不使用视图模型就得到了什么样的代码。为什么不让默认的模型绑定器来处理呢
FormCollection
是一种容易引起问题的方法,通常应避免。。。