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

Bra*_*bby 7 asp.net-mvc html-helper nullable asp.net-mvc-2

我想在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 ...
}
Run Code Online (Sandbox Code Playgroud)

查看(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>
Run Code Online (Sandbox Code Playgroud)

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

Dar*_*rov 8

试试这个:

<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>
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,这不能在服务器端完成.这里的问题是你使用null来表示一个真正的状态,即All.因此,您使用可以为空的布尔类型来表示四种可能的状态:open,closed,all和none.因此,您可以使用具有3个值的可空枚举,而不是使用可空的布尔值:Open,Closed和All,如果属性为null,则不会选择三个单选按钮.对于Type属性也是如此:您可以使用Any,Question和Compliant值,这样您就不必在助手中使用null或string.Empty作为值. (3认同)