Telerik MVC网格的编辑器模板无法正常工作

时间:2011-09-06 12:30:08

标签: c# asp.net asp.net-mvc asp.net-mvc-3 telerik-mvc

  

可能重复:
  Telerik MVC custom AJAX editor template

我正在使用MVC Telerik控件和ASP.NET MVC 3 razor视图引擎。我正在努力与电网。我最初发布了一个问题,但没有找到任何运气。它在这里:

Telerik MVC custom AJAX editor template

我的视图接受名为EditGrantApplicationViewModel的视图模型。此视图上有许多不同类型的控件。文本框,下拉列表和Telerik网格。该系统是一个教育基金系统,在申请贷款时,您必须指定您孩子的详细信息。所以我认为如果我在网格中显示子项,然后可以通过网格添加子项并在我的视图模型中链接到Children propery,那对用户会更好。

public class EditGrantApplicationViewModel
{
   public int Id { get; set; }
   public string EmployeeNumber { get; set; }
   public string Title { get; set; }
   public string FirstName { get; set; }
   public string LastName { get; set; }
   public IEnumerable<Children> Children { get; set; }
}

我将网格绑定到视图模型的Children属性,如下所示:

@(Html.Telerik().Grid(Model.Children)
   .Name("grdChildren")
   .Columns(column =>
   {
      column.Bound(x => x.Id);
      column.Bound(x => x.FullName);
   })
   .DataKeys(keys =>
   {
      keys.Add(x => x.Id);
   })
   .DataBinding(dataBinding =>
   {
      dataBinding.Ajax()
         .Select("_SelectAjaxEditing", "Grid")
         .Insert("_InsertAjaxEditing", "Grid")
         .Update("_SaveAjaxEditing", "Grid")
         .Delete("_DeleteAjaxEditing", "Grid");
   })
   .ToolBar(commands => commands.Insert().ButtonType(GridButtonType.Text))
   .Editable(editing => editing.Mode(GridEditMode.InForm))
)

我选择AJAX网格的原因是因为当我在网格中单击插入时,整个页面都会得到验证。我不想在这里将子项添加到数据库中,我只想添加到Children属性。

我遇到的问题是编辑器模板。我正在进行内联编辑,我想指定自己的编辑器模板,因为我想在此模板中重新排列控件。如何为EditGrantApplicationViewModel.Children创建编辑器模板?

我创建了一个名为Children.cshtml的局部视图,但它没有被拉入我的网格。我被告知让它使用儿童模型,但我如何在局部视图中指定这个,因为我不能有这样的东西:

@model MyProject.ViewModels.EditGrantApplicationViewModel.Children

我有一个例子,但我无法在我的场景中使用它。

我这样做是对的吗?还有什么可以尝试的?

1 个答案:

答案 0 :(得分:2)

我得到了解决方案。

我的视图模型中的Children属性是Children对象的列表。我在/Shared/Editor/Templates中创建了一个名为Children.cshtml的部分视图。

我认为Children.cshtml应该接收这样的模型:

@model MyProject.ViewModels.EditGrantApplicationViewModel.Children

这是我在@(Html.Telerik().Grid(Model.Children)中指定的属性,但它应该接收列表由其组成的模型对象,命名为Children对象:

@model MyProject.DomainObjects.Children

现在它正在通过:)