Как использовать строго типизированные HTML-помощники с обнуляемыми типами? - PullRequest
7 голосов
/ 27 октября 2010

Я хочу использовать строго типизированные помощники HTML в ASP.NET MVC 2 со свойством моей модели 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. Все результаты в одном и том же исключении. Как я могу обойти это и привязать элемент управления к нулевому значению?

Ответы [ 3 ]

7 голосов
/ 27 октября 2010

Попробуйте это:

<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>
4 голосов
/ 30 октября 2013

Дарин ответит правильно, но не выбирает правильный переключатель, когда свойство имеет значение 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
0 голосов
/ 27 октября 2010

Я полагаю, вы должны использовать RadioButtonListFor HTML-помощник. Взгляните на этот SO пост .

...