如何使用具有可空类型的强类型HTML帮助程序?

时间:2010-10-26 20:48:14

标签: asp.net-mvc asp.net-mvc-2 nullable html-helper

我想在ASP.NET MVC 2中使用强类型HTML帮助程序,我的模型属性为Nullable<T>

模型

public class TicketFilter {
    public bool? IsOpen { get; set; }
    public TicketType? Type{ get; set; } // TicketType is an enum
    // ... etc ...
}

查看(HTML)

<p>Ticket status:
  <%: Html.RadioButtonFor(m => m.IsOpen, null) %> All
  <%: Html.RadioButtonFor(m => m.IsOpen, true) %> Open
  <%: Html.RadioButtonFor(m => m.IsOpen, false) %> Closed
</p>
<p>Ticket type:
  <%: Html.RadioButtonFor(m => m.Type, null) %> Any
  <%: Html.RadioButtonFor(m => m.Type, TicketType.Question) %> Question
  <%: Html.RadioButtonFor(m => m.Type, TicketType.Complaint) %> Complaint
  <!-- etc -->
</p>

但是,以这种方式使用帮助器会抛出ArgumentNullException - 第二个参数不能为空。我尝试使用null / new bool?()以及new TicketType?而不是String.empty,而不是{{1}}。所有都导致相同的异常。我该如何解决这个问题并将控件绑定到空值?

3 个答案:

答案 0 :(得分:7)

试试这个:

<p>Ticket status:
  <%: Html.RadioButtonFor(m => m.IsOpen, "") %> All
  <%: Html.RadioButtonFor(m => m.IsOpen, "true") %> Open
  <%: Html.RadioButtonFor(m => m.IsOpen, "false") %> Closed
</p>
<p>Ticket type:
  <%: Html.RadioButtonFor(m => m.Type, "") %> Any
  <%: Html.RadioButtonFor(m => m.Type, "Question") %> Question
  <%: Html.RadioButtonFor(m => m.Type, "Complaint") %> Complaint
  <!-- etc -->
</p>

答案 1 :(得分:4)

Darin的回答是正确的,但是当属性为null时,没有选择正确的单选按钮。以下代码将修复...

<%: Html.RadioButtonFor(m => m.Type, "", new { @checked = (Model.Type == null) }) %> Any
<%: Html.RadioButtonFor(m => m.Type, "Question") %> Question
<%: Html.RadioButtonFor(m => m.Type, "Complaint") %> Complaint

答案 2 :(得分:0)

我相信您应该使用RadioButtonListFor HTML帮助器。看一下这个SO post