#asp.net #asp.net-mvc-3 #html.actionlink
#asp.net #asp.net-mvc-3 #html.actionlink
Вопрос:
Мне нужно использовать Html.ActionLink в формате: свойство сетки.Спецификация столбца. Мой код выглядит следующим образом:
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)
, имеет некоторые недопустимые аргументы
Когда я меняю элемент.Начните с обычного текста, такого как «Редактировать», тогда он будет работать нормально.
Я новичок в ASP.NET , может кто-нибудь, пожалуйста, помочь мне понять, что не так с приведенными выше утверждениями?
Заранее спасибо.
Ответ №1:
Параметр format имеет тип Func<dynamic, HelperResult>
.
Он должен возвращать a HelperResult
, а не an IHtmlString
.
Он определен таким образом, чтобы вы могли передавать встроенного помощника.
Чтобы передать встроенного помощника, удалите (item) =>
; встроенные помощники неявно генерируют лямбда-выражение с item
параметром.
Чтобы передать обычное лямбда-выражение, вам нужно заставить его возвращать HelperResult
экземпляр.
HelperResult
s возьмите Action<TextWriter>
, чтобы вы написали
item => new HelperResult(w => w.Write(Html.ActionLink(...).ToHtmlString()))
РЕДАКТИРОВАТЬ: я не понял, что параметр объявлен как Func<dynamic, object>
. Это означает, что вы можете либо передать встроенный помощник, либо любое другое лямбда-выражение.
Ваш второй пример должен работать.
Вы также можете использовать встроенный помощник. Чтобы сделать это без HTML-тега, используйте специальный <text>
тег:
item => @<text>@Html.ActionLink(...)</text>
Razor удалит <text>
из вывода.
Комментарии:
1. Спасибо за ваш быстрый ответ. Я попробовал оба варианта, но это не помогло. Я все еще получаю ту же ошибку.
2. Это то же сообщение об ошибке. Не изменилось —- CS1502: наилучшее соответствие перегруженного метода для System.Web.Helpers. Веб-сетка. Столбец (строка, строка, система. Функция <динамический, объект>, строка, bool)’ имеет некоторые недопустимые аргументы
3. Я не уверен, понял ли я ваш вопрос. Но это то, что я получаю с веб-страницы ——————————— Index.cshtml(96,17): ошибка CS1502: наилучший перегруженный метод соответствует ‘System.Web.Helpers. Веб-сетка. Столбец (строка, строка, система. Функция <динамический, объект>, строка, bool)’ имеет некоторые недопустимые аргументы Index.cshtml(98,27): ошибка CS1503: Аргумент 3: не удается преобразовать из ‘лямбда-выражения’ в ‘System. Функция <динамический, объект>’
4. Обычно это означает, что у вас есть какая-то синтаксическая ошибка в вашем лямбда.
5. Попробуйте
new { id = (string)item.BookName }
Ответ №2:
Передаваемая строка отображения имеет тип DateTime . Попробуйте ввести строку.
grid.Column(header: "Column 2", format: (item) => Html.ActionLink(item.StartTime.ToString(), "ShowShippingFileMessage", new { @id = item.BookName }))