@html.checkboxfor不向控制器返回值视图

时间:2013-11-27 13:36:41

标签: asp.net-mvc asp.net-mvc-3 checkboxfor

我正在研究mvc3。我创建了一个包含两个属性的模型,即名称 IsSelect

在这里。

public class DemoModel
{
    public string Name { get; set; }
    public bool? IsSelect { get; set; }
}

我正在传递此模型进行查看。

    public ActionResult checkbox()
    {
        DemoModel model = getdemoModel();
        return View(model);
    }
    [HttpPost]
    public ActionResult checkbox(DemoModel model)
    {
        ModelState.Clear();
        return View(model);
    }
    public DemoModel getdemoModel()
    {
        DemoModel demoModel = new DemoModel();
        demoModel.Name = "ABC";
        demoModel.IsSelect = null;
        return demoModel;
    } 

这是我的观点。

@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
    <legend>DemoModel</legend>

    <div class="editor-label">
        @Html.LabelFor(model => model.Name)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Name)
        @Html.ValidationMessageFor(model => model.Name)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.IsSelect)
    </div>
    <div class="editor-field">
        @Html.CheckBoxFor(model => model.IsSelect.Value)
        @Html.ValidationMessageFor(model => model.IsSelect)
    </div>

    <p>
        <input type="submit" value="Save" />
    </p>
</fieldset>
}

当我运行它时,它会给我一个错误,即在@Html.CheckBoxFor(model => model.IsSelect.Value) 行。

  

Nullable对象必须有值。

但是当我将IsSelect值设置为false时,它可以正常工作。但它不会返回IsSelect属性的值。它将null值返回给控制器。我认为这是一个非常简单的问题,但我想念一些东西。那么,我如何处理@Html.CheckBoxFor中的空值?如何将它的值返回给控制器?

2 个答案:

答案 0 :(得分:1)

首先,如果您不需要空值,请删除?来自宣言。

然后,将假值传递给IsSelect。

将其绑定到以下视图:

@Html.CheckBoxFor(model=>model.IsSelect)

<强>更新

 public static T GetValue<T>(object o)
        {
            T val = default(T);

            if (o != null && o != DBNull.Value)
            {
                val = (T)o;
            }
            return val;
        }

上面的代码片段是一个辅助函数,用于检查值是否为null,如果是,则将其转换为默认值。

从数据库中读取时,请使用以下内容:这将有助于您进行投射:

        `bool IsSelect=GetValue<bool>(value)`

希望这会有所帮助..

答案 1 :(得分:0)

复选框不适用于可归零的布尔值,因为它可以存储3个状态。空,虚,实。复选框可以有true或false。

如果你想使用复选框,那么空状态将被牺牲为假

    @{
    Model.IsSelect=Model.IsSelect??false;    
    }