Asp.net mvc 使用MVCContrib网格进行编辑

Asp.net mvc 使用MVCContrib网格进行编辑,asp.net-mvc,mvccontrib,Asp.net Mvc,Mvccontrib,我刚开始在一个测试项目中使用MVCContrib网格。我很难找到有关如何使用它进行编辑/更新/删除的信息 有谁能告诉我如何将一行置于编辑模式,或者如果该网格没有这样的功能,请讨论在MVC中编辑列表数据的最佳实践。似乎MVCContrib是一种从模型对象集合构造HTML表的简单方法。与WebForms GridView类似,它似乎无法将行置于编辑/更新/删除“模式” 但是,看起来您可以随心所欲地处理该功能。如果要转到单独的页面进行编辑模式,只需在其中一列中添加一个具有该行id的链接即可。以下内容直

我刚开始在一个测试项目中使用MVCContrib网格。我很难找到有关如何使用它进行编辑/更新/删除的信息


有谁能告诉我如何将一行置于编辑模式,或者如果该网格没有这样的功能,请讨论在MVC中编辑列表数据的最佳实践。

似乎MVCContrib是一种从模型对象集合构造HTML表的简单方法。与WebForms GridView类似,它似乎无法将行置于编辑/更新/删除“模式”

但是,看起来您可以随心所欲地处理该功能。如果要转到单独的页面进行编辑模式,只需在其中一列中添加一个具有该行id的链接即可。以下内容直接取自:

{
column.For(x=>x.Id).Named(“personid”);
column.For(x=>x.Name);
(x=>x.Gender);
column.For(x=>x.DateOfBirth);
列.For(“查看人”)。命名为(“”)。操作(p=>{%>
{     
如果(行IsAlternate){%>
在这里,他们似乎希望将用户引导到查看人员页面:


祝您好运,编码愉快。

您可以通过自定义单元格的渲染方式添加编辑模式渲染。我使用以下扩展方法:

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;
}
公共静态IGridColumn操作(此IGridColumn列、Func viewAction、Func editAction、Func editMode)
{
column.CustomItemRenderer=(context,item)=>context.Writer.Write(“+(editMode(item)?editAction(item):viewAction(item))+”;
返回列;
}
这允许您指定列在视图模式和编辑模式下的呈现方式。该模式是使用第三个操作确定的,对于要编辑的行,该操作的计算结果应为true

在视图中使用此选项看起来像这样:

<%= 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.")
%>
{
column.For(x=>x.Name).Action(
item=>Html.ActionLink(item.Name,“SomeAction”),
item=>Html.TextBox(“item.Name”,item.Name),
item=>(Model.SelectedItem==item));
} )
.Empty(“未找到任何项目”)
%>
可以使用相同的模式在单元格中呈现动作链接(编辑、应用、取消等)。
如果要一次编辑多行,请确保字段名是唯一的。

您能解释一下扩展方法,它们应该放在哪里,以及如何将它们与视图绑定吗?@sharma扩展方法必须位于可访问的命名空间内,因此在视图(.aspx/.ascx)内请确保使用具有扩展方法的静态类创建名称空间。谢谢,它工作得很好。它确实移动到了另一个页面,并且我没有显示textbox来编辑它,关于如何显示edittable textbox并从那里获取信息的任何说明?@sharma我不确定我是否理解您的问题。也许您应该发布一个这里有一个关于StackOverflow的新问题,解释一下你到底想要完成什么,并添加你现在拥有的代码。这样你会得到更好的反馈。你能看一下吗:
<%= 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.")
%>