Каков правильный синтаксис MvcContrib 3 для этого?

#c# #asp.net-mvc-3 #razor #mvccontrib

#c# #asp.net-mvc-3 #razor #mvccontrib

Вопрос:

Я унаследовал ASP.NET Веб-сайт MVC 1, использующий MvcContrib 1.5, который я пытаюсь обновить до MVC 3 и MvcContrib 3.

На веб-сайте было следующее при использовании Html.Grid

 .Columns(column=>{
  column.For("Yes").Action(p =>{%>
    <td>
      <%=this.Hidden("category["   i  "].Id").Value(p.Id)%>
      <%=this.RadioButton("category["   i   "].Interested").Value("true") %>
    </td>
  <%});

  column.For("No").Action(p =>{%>
    <td>
      <%=this.RadioButton("category["   i   "].Interested").Value("false") %> 
    </td>                                                       
  <%});
})
  

В MvcContrib .For("Yes") больше нет допустимого синтаксиса для создания столбца со строкой в качестве заголовка.

Чтобы заставить его работать, мне пришлось изменить его на .For(c=>"Yes") и мне пришлось добавить .Named("Yes") , чтобы вернуть текст заголовка. Насколько я знаю, c=>"Yes" на самом деле ничего полезного не делает. Что там должно быть? Или я должен просто оставить это, если это не наносит никакого вреда?

Кроме того, .Action устарел, и вместо этого предлагается использовать .Custom . Как бы мне преобразовать вышеуказанное?

 column.Custom(p => {%>
  <td style="text-align:center">
    <%=this.Hidden("category["   i   "].Id").Value(p.Id)%>
    <%=this.RadioButton("category["   i   "].Interested").Value("true") %>
  </td>
<% }).Named("Yes");
  

Ожидается возвращаемое значение, я не уверен, что указать, и не могу найти много примеров.

Ответ №1:

 column.Custom(
    @<text>
         <td style="text-align:center">
             @this.Hidden("category["   i   "].Id").Value(item.Id)
             @this.RadioButton("category["   i   "].Interested").Value("true")
         </td>
     </text>
).Named("Yes");
  

Ответ №2:

For() Метод используется, когда вы просто хотите показать значение свойства — так что вы могли бы использовать его как:

 column.For(p => p.Id).Named("Yes");
  

Обратите внимание, что вам не обязательно использовать, Named() если вы присвоили свойству Id [Display(Name="Yes")] атрибут в модели, поскольку это будет использоваться по умолчанию.

Вы можете использовать Custom() , когда хотите отобразить некоторый созданный вами HTML-код, поэтому вы можете просто вернуть MvcHtmlString . С синтаксисом razor это могло бы выглядеть примерно так:

 column.Custom(p => @Html.Partial("IdPartial",p.Id));