asp.net-mvc – 使用RadioButtons的可空值布尔的MVC3 EditorTemplate
|
我有一个属性在我的一个对象是一个可空的布尔值,我希望我的逻辑具有真实的代表是,假为否,空为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> </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> (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 剃刀 – MVC布局VS MVC主页
- .net中基于资源的授权
- asp.net-mvc – 为什么DropDownListFor会在提交后丢失多个选
- asp.net – 如何添加一个访问控制允许原始头在IIS7有限制
- 如何在子文件夹中托管ASP.NET MVC站点
- asp.net-mvc – 自定义网站的Orchard
- asp.net-core-mvc – 在Entity Framework Core中使用[Compl
- asp.net – 为什么aspx代码隐藏文件被声明为部分类?
- asp.net-core – 在ASP.NET Core中使用Entity Framework 6
- 在ASP.NET中模拟成员资格用户
- 在文件系统中获取ASP.NET MVC站点的路径
- 你如何在ASP.NET中配置httpOnlyCookies?
- asp.net-mvc-3 – 从ASP的Ajax.ActionLink获取JS
- asp.net会员 – 删除asp.net会员和角色提供者
- asp.net-core – .NET Core的静态代码分析工具
- asp.net-mvc-2 – MVC的DataAnnotationsModelMet
- asp.net – 禁用帐户锁定与SqlMembershipProvide
- 实现ASP.NET MVC应用程序的全文搜索的最佳方法是
- asp.net-mvc – 首次使用ASP.NET MVC时的主要风险
- 从asp.net代码后面读表单认证cookie
