使用 MVCContrib 网格进行编辑
Posted
技术标签:
【中文标题】使用 MVCContrib 网格进行编辑【英文标题】:Use MVCContrib grid for editing 【发布时间】:2010-10-24 01:35:22 【问题描述】:我刚开始在一个测试项目中使用 MVCContrib 网格。我很难找到有关如何使用它进行编辑/更新/删除的信息。
谁能告诉我有关如何将行置于编辑模式的信息,或者如果该网格没有这样的东西,请讨论在 MVC 中编辑列表数据的最佳实践。
【问题讨论】:
【参考方案1】:您可以通过自定义单元格的呈现方式来添加编辑模式呈现。我正在使用以下扩展方法:
public static IGridColumn<T> Action<T>( this IGridColumn<T> column, Func<T, string> viewAction, Func<T, string> editAction, Func<T,bool> editMode )
column.CustomItemRenderer = ( context, item ) => context.Writer.Write( "<td>" + ( editMode( item ) ? editAction( item ) : viewAction( item ) ) + "</td>" );
return column;
这允许您指定列在查看模式和编辑模式下的呈现方式。模式是使用第三个操作确定的,对于您要编辑的行,该操作应该评估为真。
在视图中使用它看起来像这样:
<%= html.Grid( Model.Items ).Columns( column =>
column.For( x => x.Name ).Action(
item => Html.ActionLink( item.Name, "SomeAction" ),
item => Html.TextBox( "Item.Name", item.Name ),
item => ( Model.SelectedItem == item ) );
)
.Empty("No items found.")
%>
您可以使用相同的模式在单元格中呈现操作链接(编辑、应用、取消等)。 如果您想一次编辑多行,请确保字段名称是唯一的。
【讨论】:
您能解释一下扩展方法,它们应该选择放置在哪里以及如何将它们与视图绑定吗? @sharma 扩展方法必须位于可访问的命名空间内,因此在视图 (.aspx/.ascx) 中,请确保 Import 命名空间具有包含扩展方法的静态类。 谢谢,效果很好。它确实移动到了不同的页面,我没有出现编辑它的文本框,关于如何显示可编辑文本框并从那里获取信息的任何说明? @sharma 我不确定我是否理解您的问题。也许您应该在 *** 上发布一个新问题,解释您到底想要完成什么并添加您现在拥有的代码。这样你会得到更好的反馈。 你能看一下吗: ***.com/questions/5544217/…【参考方案2】:MVCContrib 似乎是一种从模型对象集合构造 HTML 表的简单方法。它似乎没有任何能力将一行置于类似于 WebForms GridView 的编辑/更新/删除“模式”。
但是,看起来您可以随心所欲地处理该功能。如果您想转到单独的页面进行编辑模式,只需在具有该行 ID 的列之一中放置一个链接。以下直接摘自:http://www.jeremyskinner.co.uk/2009/03/01/mvccontrib-grid-part-5-the-action-syntax/
<% Html.Grid(Model).Columns(column =>
column.For(x => x.Id).Named("Person ID");
column.For(x => x.Name);
column.For(x => x.Gender);
column.For(x => x.DateOfBirth);
column.For("View Person").Named("").Action(p => %>
<td style="font-weight:bold">
<%= Html.ActionLink("View Person", "Show", new id = p.Id )%>
</td>
<% );
).RowStart((p,row) =>
if (row.IsAlternate) %>
<tr style="background-color:#CCDDCC">
<% else %>
<tr>
<%
).Render(); %>
他们似乎希望将用户引导至查看人员页面:<%= Html.ActionLink("View Person", "Show", new id = p.Id )%>
。
祝你好运,编码愉快。
【讨论】:
以上是关于使用 MVCContrib 网格进行编辑的主要内容,如果未能解决你的问题,请参考以下文章