加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 使用RadioButtons的可空值布尔的MVC3 EditorTemp

发布时间:2020-12-16 00:28:32 所属栏目:asp.Net 来源:网络整理
导读:我有一个属性在我的一个对象是一个可空的布尔值,我希望我的逻辑具有真实的代表是,假为否,空为N / A。现在因为我将在许多不同的对象上拥有这样的多个属性,所以编辑器和显示这些属性的模板是最有意义的。我将使用jQuery UI应用一个可视元素的按钮,这是所
我有一个属性在我的一个对象是一个可空的布尔值,我希望我的逻辑具有真实的代表是,假为否,空为N / A。现在因为我将在许多不同的对象上拥有这样的多个属性,所以编辑器和显示这些属性的模板是最有意义的。我将使用jQuery UI应用一个可视元素的按钮,这是所有的工作,但现在,这超出了我的问题的范围。我的编辑器模板看起来像这样。
@model bool?
<div data-ui="buttonset">
@Html.RadioButtonFor(x => x,true,new { id = ViewData.TemplateInfo.GetFullHtmlFieldId("") + "Yes"}) <label for="@(ViewData.TemplateInfo.GetFullHtmlFieldId(""))Yes">Yes</label>
@Html.RadioButtonFor(x => x,false,new { id = ViewData.TemplateInfo.GetFullHtmlFieldId("") + "No" }) <label for="@(ViewData.TemplateInfo.GetFullHtmlFieldId(""))No">No</label>
@Html.RadioButtonFor(x => x,"null",new { id = ViewData.TemplateInfo.GetFullHtmlFieldId("") + "NA" }) <label for="@(ViewData.TemplateInfo.GetFullHtmlFieldId(""))NA">N/A</label>
</div>

我的问题是,在任何情况下,我都不能得到这个编辑器模板来正确显示模型的当前值。因为我没有在这个范围渲染一个模型的属性,而是模型本身,所以MVC3内置的逻辑将不会正确设置checked属性,因为这样做是为了验证名称不为空或者为空(参见MVC3 source,InputExtensions.cs:line#259)。我不能通过与模型进行比较来动态地设置被检查的属性,因为浏览器在检查属性不存在的情况下检查单选按钮是不是值,所以即使我的单选按钮看起来像下面那样,最后一个仍然是被选中的。

<div class="span-4" data-ui="buttonset">
<input checked="checked" id="MyObject_BooleanValueYes" name="MyObject.BooleanValue" type="radio" value="True" /><label for="MyObject_BooleanValueYes">Yes</label>
<input checked="" id="MyObject_BooleanValueNo" name="MyObject.BooleanValue" type="radio" value="False" /><label for="MyObject_BooleanValueNo">No</label>
<input checked="" id="MyObject_BooleanValueNA" name="MyObject.BooleanValue" type="radio" value="null" /><label for="MyObject_BooleanValueNA">N/A</label>
</div><span class="field-validation-valid" data-valmsg-for="MyObject.BooleanValue" data-valmsg-replace="true"></span>&nbsp;</div>

我不能有条件地添加HtmlAttribute使用类似if?truevalue:falsevalue因为true / false部分将是不同的匿名类型,我收到一个错误。

我正在努力如何做到这一点,希望你们中的一个有一个建议如何解决这个问题?

解决方法

@model bool?
<div data-ui="buttonset">
@{
    Dictionary<string,object> yesAttrs = new Dictionary<string,object>(); 
    Dictionary<string,object> noAttrs = new Dictionary<string,object> nullAttrs = new Dictionary<string,object>(); 

    yesAttrs.Add("id",ViewData.TemplateInfo.GetFullHtmlFieldId("") + "Yes");
    noAttrs.Add("id",ViewData.TemplateInfo.GetFullHtmlFieldId("") + "No");
    nullAttrs.Add("id",ViewData.TemplateInfo.GetFullHtmlFieldId("") + "NA");

    if (Model.HasValue && Model.Value)
    {
        yesAttrs.Add("checked","checked");
    }
    else if (Model.HasValue && !Model.Value)
    {
        noAttrs.Add("checked","checked");
    }
    else
    {
        nullAttrs.Add("checked","checked");
    }
}

@Html.RadioButtonFor(x => x,"true",yesAttrs) <label for="@(ViewData.TemplateInfo.GetFullHtmlFieldId(""))Yes">Yes</label>
@Html.RadioButtonFor(x => x,"false",noAttrs) <label for="@(ViewData.TemplateInfo.GetFullHtmlFieldId(""))No">No</label>
@Html.RadioButtonFor(x => x,nullAttrs) <label for="@(ViewData.TemplateInfo.GetFullHtmlFieldId(""))NA">N/A</label>
</div>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读