【问题标题】:@html.checkboxfor not return value view to controller@html.checkboxfor 不向控制器返回值视图
【发布时间】:2013-12-04 15:06:57
【问题描述】:

我正在开发 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 中的空值?以及如何将其值返回给控制器?

【问题讨论】:

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


    【解决方案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;
            }
    

    上面的 sn-p 是一个辅助函数,检查一个值是否为 null ,如果是则将其转换为默认值。

    从数据库中读取时,使用一些类似的东西:这将帮助您进行转换:

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

    希望这会有所帮助..

    【讨论】:

    • 这只是一个例子。我正在从包含 IsSelect 列中的空值的数据库中检索值
    • 好的..当您从数据库中检索数据时,为了避免空值,您应该将这些空值类型转换为它们类型的默认值。例如,bool 的默认值为 false。
    • 如何投射?这就是我创建 bool 的原因?。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-07
      • 1970-01-01
      • 2020-02-18
      • 1970-01-01
      • 1970-01-01
      • 2019-12-21
      • 1970-01-01
      相关资源
      最近更新 更多