#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));