Подтвердить что ты не робот

Формат ASP.NET MVC3 WebGrid: параметр

Я пытаюсь использовать новый WebGrid в ASP.NET MVC3, и один из столбцов я хочу отображать набор значков ссылок, которые выполняют различные действия (Edit, View, Delete)... Для этого у меня есть расширения HtmlHelper, которые в основном выводят следующий HTML:

<a href="" title=""><img alt="" src="" /></a>

Расширение возвращает MvcHtmlString, и оно отлично работает при использовании в представлениях Razor самостоятельно. Eg: @Html.ActionLinkIconForEditAction( "Клиент", 2)

Проблема заключается в том, что мне нужно вызвать этот помощник (один раз для каждого действия) в столбце WebGrid при передаче идентификатора объекта. Проблема, с которой я столкнулся, заключается в том, что компилятор дает мне ошибку, говоря, что он не может преобразовать MvcHtmlString (или "lambda expression" в зависимости от вызова, который я пытаюсь), к System.Func, ожидаемому в формате...

Так, например, это работает:

grid.Column(header: "", format: @<text>@Html.ActionLinkIconForEditAction("Customer", 2)</text>)

Но это не так:

grid.Column(header: "", format: (customer) => @<text>@Html.ActionLinkIconForEditAction("Customer", customer.Id)</text>)
grid.Column(header: "", format: (customer) => Html.ActionLinkIconForEditAction("Customer", customer.Id))

Я получаю:

Error 4 Argument 3: cannot convert from 'lambda expression' to 'System.Func<dynamic,object>'

или для этого вызова:

grid.Column(header: "", format: Html.ActionLinkIconForEditAction("Customer", customer.Id)),

Я получаю:

Error 5 Argument 3: cannot convert from 'System.Web.Mvc.MvcHtmlString' to 'System.Func<dynamic,object>'

Что странно, у меня есть другие столбцы, которые упрощают lambdas, прямое использование Access Model ModelerProperty и даже вывод из String.Format("")... Все они отлично работают... Я прочитал все документы в Func и этот поток, а также, и до сих пор не могу это понять:)

Может ли кто-нибудь определить, что я делаю неправильно?

4b9b3361

Ответ 1

Я получил это:).... Проблема, похоже, в том, что С# обрабатывает динамические объекты... Множество пользователей имеют взрыв с этим...

Исправление было так же просто, как отличить правильный тип параметра от моего помощника расширения... Итак, это работает:

grid.Column(header: "", format: @<text>@Html.ActionLinkIconForEditAction("Customer", (int)item.Id)

Другой трюк заключается в том, чтобы использовать "встроенный" объект "item" и не предоставлять свои собственные. Так, например, это не работает:

grid.Column(header: "", format: (customer) =>  @<text>@Html.ActionLinkIconForEditAction("Customer", (int)customer.Id)

Много чтения, настройки, обучения... Надеюсь, в следующей версии будет намного проще использовать, когда вам нужно добавить контент в столбцы, которые не поступают непосредственно из модели...

Отношения Z...

Ответ 2

grid.Column(format: (item) => Html.ActionLink("EditCustomer","Editcustomer", new {CustomerId=item.CustomerId}))

Это будет работать, и над ним тоже работать. Здесь 1st "EditCustomer" - это текст, который будет видимым для пользователей, второй "EditCustomer" - это название действия, которое вы хотите перенаправить, и элемент

Ответ 3

Мне пришлось создать код WebGrid в коде С# и должен был отображать определенный столбец с помощью гиперссылки. Ни один из упомянутых выше методов не работал у меня. Итак, я использовал MvcHtmlString.create и передал ему возвращаемое значение String.format.


  format: (item) => MvcHtmlString.Create(string.Format((A HREF=\"/Inventory/EditInventory/{0}\"){1}(/A)", item.ID, item.Property))) 

Замените (или) внутри строки символом < или > соответственно.