0

我正在研究mvc3。我创建了一个模型,其中包含两个属性,即NameIsSelect

这里是。

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) 在线。

可空对象必须有一个值。

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

4

2 回答 2

1

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

然后,将 false 值传递给 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)`

希望这可以帮助..

于 2013-11-27T13:43:29.210 回答
0

复选框不适用于可以为空的布尔值,因为它可以存储 3 种状态。空,真,假。其中 as 复选框可以有真或假。

如果你确实想使用复选框,那么 null 状态应该被牺牲为 false

    @{
    Model.IsSelect=Model.IsSelect??false;    
    }
于 2013-11-28T17:46:31.270 回答