mvc contrib grid + формы
Кому-нибудь удавалось создавать формы в сетке?
Попытка (которая не работает):
<%= Html.Grid(ViewData["xyz"] as IEnumerable<xyz>).Columns(column =>
{
column.For(gf => gf.Value).Named("Value");
column.For(gf =>
<% using (Html.BeginForm("deletebla", "controllername", FormMethod.Post, new { @class = "deleteForm" }))
{ %>
<input type="submit" value="Delete" />
<% }
%>
).Named("");
}).Empty("Sorry no data.")%>
Благодарю.
Крис
1 ответ
Решение
Здесь две возможности (в моем примере я буду использовать строго типизированное представление вместо ViewData
в целях пропаганды передовой практики).
Используйте синтаксис действия:
<% Html.Grid<UserViewModel>(Model)
.Columns(column =>
{
column.For("Test").Named("Value").Action(p => { %>
<td>
<% using (Html.BeginForm("deletebla", "controllername", FormMethod.Post, new { @class = "deleteForm" })) { %>
<% } %>
</td>
<% });
}).Render();
%>
после добавления этого в web.config, чтобы убедиться, что правильные методы расширения находятся в области видимости:
<system.web>
<pages>
<namespaces>
<add namespace="MvcContrib.UI.Grid.ActionSyntax" />
</namespaces>
</pages>
</system.web>
Или, если вы хотите избежать тега супа, просто используйте частичное:
<%= Html.Grid<UserViewModel>(Model)
.Columns(column =>
{
column.For("Test").Named("Value").Partial("Foo");
})
%>
И в Foo.ascx
:
<% using (Html.BeginForm("deletebla", "controllername", FormMethod.Post, new { @class = "deleteForm" })) { %>
<% } %>
Я бы определенно выбрал второй вариант.