ASP.NET MVC3 - Использование Html.ActionLink - PullRequest
2 голосов
/ 01 ноября 2011

Мне нужно использовать Html.ActionLink в формате: свойство grid.Column спецификации. Мой код выглядит так:

grid.GetHtml(

  grid.Columns( 
    grid.Column(header: "Column 1", format: (item) => @<div class='webgrid-bookname-column-style'> @item.BookName </div>),
    grid.Column(header: "Column 2", format: (item) => Html.ActionLink(item.StartTime, "ShowShippingFileMessage", new { @id = item.BookName }))
  )
)

Когда я использую этот синтаксис, он дает мне ошибку компиляции Наилучшее совпадение перегруженного метода для System.Web.Helpers.WebGrid.Column(string, string, System.Func<dynamic,object>, string, bool) имеет недопустимые аргументы Когда я изменяю item.StartTime выше с обычным текстом, таким как «Редактировать», он работает нормально.

Я новичок в ASP.NET, кто-нибудь может помочь мне понять, что не так с приведенными выше утверждениями?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 01 ноября 2011

Параметр формата имеет тип Func<dynamic, HelperResult>.
Он должен возвращать HelperResult, а не IHtmlString.
Он определен таким образом, чтобы вы могли передать встроенный помощник .
Чтобы передать встроенный помощник, удалите (item) =>;встроенные помощники неявно генерируют лямбда-выражение с параметром item.
Чтобы передать нормальное лямбда-выражение, необходимо, чтобы оно возвращало HelperResult экземпляр .
HelperResult s взять Action<TextWriter>, так что вы бы написали

item => new HelperResult(w => w.Write(Html.ActionLink(...).ToHtmlString()))

EDIT : я не понял, что параметр объявлен как Func<dynamic, object>.Это означает, что вы можете передать встроенный помощник или любое другое лямбда-выражение.
Ваш второй пример должен сработать.

Вы также можете использовать встроенный помощник.Чтобы сделать это без HTML-тега, используйте специальный тег <text>:

item => @<text>@Html.ActionLink(...)</text>

Razor сбросит <text> с вывода.

0 голосов
/ 15 октября 2012

Отображаемая строка, которую вы передаете, имеет тип DateTime.Попробуйте ввести строковое значение.

grid.Column(header: "Column 2", format: (item) => Html.ActionLink(item.StartTime.ToString(), "ShowShippingFileMessage", new { @id = item.BookName }))
...