Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.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
Asp.net mvc MVC.NET 4强类型视图和不绑定复选框_Asp.net Mvc_Checkboxfor - Fatal编程技术网

Asp.net mvc MVC.NET 4强类型视图和不绑定复选框

Asp.net mvc MVC.NET 4强类型视图和不绑定复选框,asp.net-mvc,checkboxfor,Asp.net Mvc,Checkboxfor,我目前正在构建一个带有强类型视图的复选框列表,这时我遇到了一个非常奇怪的情况。 这是我的模型视图: public class QuadroClinicoModelView { public QuadroClinicoModelView() { this.check = false; } public String codigo { set; get; } public String nome { set; get; } pu

我目前正在构建一个带有强类型视图的复选框列表,这时我遇到了一个非常奇怪的情况。 这是我的模型视图:

public class QuadroClinicoModelView 
{ 
    public  QuadroClinicoModelView()
    {
        this.check = false;
    }

    public String codigo { set; get; }
    public String nome { set; get; }
    public bool check { set; get; } 
}
我的复选框列表:

public List<QuadroClinicoModelView> quadrosClinicos { set; get; }
public-List-quadrosClinicos{set;get;}
在我看来:

<tbody>
    @for (var i = 0; i < Model.quadrosClinicos.Count; i++)
    {
        <tr>
            <td>@Html.CheckBoxFor(x => x.quadrosClinicos[i].check)</td>
            <td>
                @Html.HiddenFor(x => x.quadrosClinicos[i].codigo)
                @Model.quadrosClinicos[i].codigo
            </td>

    .
    .
    .
</tbody>

@对于(变量i=0;ix.quadrosClinicos[i].check)
@Html.HiddenFor(x=>x.quadrosClinicos[i].codigo)
@Model.quadrosClinicos[i].codigo
.
.
.
每次我的列表中有两个以上的复选框时,一切都正常。 但不知何故,当我有2个或更少的复选框时,模型视图在我提交表单时没有绑定

我看到了Microsoft所做的一种奇怪的表单构造,使用两种不同的输入(hidden和checkbox)和相同的name属性,但是当我使用html帮助程序为创建自定义复选框时,例如:

public static class CheckBoxHelper
{
    public static MvcHtmlString CustomCheckBoxFor(this HtmlHelper htmlHelper, string name, object htmlAttributes)
    {
        string checkBoxWithHidden = htmlHelper.CheckBox(name, htmlAttributes).ToHtmlString().Trim();
        string pureCheckBox = checkBoxWithHidden.Substring(0, checkBoxWithHidden.IndexOf("<input", 1));
        return new MvcHtmlString(pureCheckBox);
    }
    public static MvcHtmlString CustomCheckBoxFor(this HtmlHelper htmlHelper, string name)
    {
        string checkBoxWithHidden = htmlHelper.CheckBox(name).ToHtmlString();
        string pureCheckBox = checkBoxWithHidden.Substring(0, checkBoxWithHidden.IndexOf("<input", 1));
        return new MvcHtmlString(pureCheckBox);
    }
}
公共静态类CheckBoxHelper
{
公共静态MvcHtmlString CustomCheckBoxFor(此HtmlHelper HtmlHelper、字符串名称、对象htmlAttributes)
{
字符串checkBoxWithHidden=htmlHelper.CheckBox(名称,htmlAttributes.ToHtmlString().Trim();

string pureCheckBox=checkBoxWithHidden.Substring(0,checkBoxWithHidden.IndexOf)(
for
循环中的代码将正常工作并正确绑定。如果不是,则是由于您没有向我们显示的某些代码。您的
CustomCheckBoxFor()是什么原因
与问题有关-您没有使用它作为您的视图。请注意您的
公共四边形模型视图()
constructor是无意义的-默认值
bool
已经是
false
除了复选框列表中有两个或两个以下的项目外,代码确实可以正常工作。自定义复选框列表是我读到的一个解决方案,如果问题是由生成的两个不同输入触发的,它可以纠正问题。这只是我尝试过的一个解决方案并且没有修复itI repeat。无论列表中有多少项,您显示的代码都将正确绑定(如果没有,则是因为您没有向我们显示代码)。我解决了这个问题。在我看来,我必须区分复选框列表:quadrosClinicos和quadrosClinicosSelected,那里有不同的列表。不知何故,框架将这两个相似的名称弄乱了,当我在第一个列表中只有很少的项时,它就不起作用了。我将第一个列表更改为QuadrostoLoadd,它就起作用了。我不知道如何,但framework不喜欢使用类似名称的复选框列表。如果您显示了相关代码,您可能会得到以下问题的答案:我不知道如何使用,但framework不喜欢使用类似名称的复选框列表:)