【问题标题】:custom editor template are not setting correctly checkbox values自定义编辑器模板未正确设置复选框值
【发布时间】:2013-03-23 12:02:19
【问题描述】:

我为布尔类型创建了一个编辑器模板,我的问题是当模型属性不能为空时,复选框的默认行为被修改,例如,如果模型值是true,那么视图中的复选框会出现而没有选中。我究竟做错了什么???这是代码。

@model Nullable<bool>

@{
    var listItems = new[]
    {   
        new SelectListItem { Value = "null", Text = "Sin Valor" },
        new SelectListItem { Value = "true", Text = "Si" },
        new SelectListItem { Value = "false", Text = "No" }
    };  

}

@if (ViewData.ModelMetadata.IsNullableValueType)
{

    @Html.DropDownListFor(model => model.Value, listItems)
}
else
{
    @Html.CheckBox("", ViewData.TemplateInfo.FormattedModelValue)
}

【问题讨论】:

    标签: c# asp.net-mvc-3 razor


    【解决方案1】:

    不确定您在复选框中使用的ViewData.ModelMetadata.v 是什么意思。你试过了吗:

    @model Nullable<bool>
    
    @{
        var listItems = new[]
        {   
            new SelectListItem { Value = "null", Text = "Sin Valor" },
            new SelectListItem { Value = "true", Text = "Si" },
            new SelectListItem { Value = "false", Text = "No" }
        };  
    }
    
    @if (ViewData.ModelMetadata.IsNullableValueType)
    {
        @Html.DropDownList("", new SelectList(listItems, "Value", "Text", Model))
    }
    else
    {
        @Html.CheckBox("", Model.Value)
    }
    

    【讨论】:

    • 我修改了问题,你可以看到我的旧代码。而我到底想要做什么
    【解决方案2】:

    此示例详细显示了用于下拉列表的布尔模板的实现,该下拉列表包含“是”、“否”和“未设置”值,并且还处理空布尔值。灵感来自上面的 Darin Dimitrov 和 Jorge - 谢谢。

    型号 学生.cs

        [Display(Name = "Present:")]
        [UIHint("YesNo")]
        public bool? IsPresent { get; set; }
    

    显示模板: YesNo.cshtml

    @model Nullable<bool>
    
    @if (Model.HasValue)
    {
        if (Model.Value)
            { <text>Yes</text> }
        else
            { <text>No</text> }
    }
    else
        { <text>Not Set</text> }
    

    编辑器模板: YesNo.cshtml

    @model Nullable<bool>
    
    @{
        var listItems = new[]
        {   
            new SelectListItem { Value = "null", Text = "Not Set" },
            new SelectListItem { Value = "true", Text = "Yes" },
            new SelectListItem { Value = "false", Text = "No" }
        };  
    }
    
    @if (ViewData.ModelMetadata.IsNullableValueType)
    {
        @Html.DropDownList("", new SelectList(listItems, "Value", "Text", Model))
    }
    else
    {
        @Html.CheckBox("", Model.Value)
    }
    

    查看:

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

    【讨论】:

      猜你喜欢
      • 2012-06-20
      • 1970-01-01
      • 2011-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-26
      • 2020-05-04
      • 2015-03-15
      相关资源
      最近更新 更多