Telerik MVC Grid中的嵌套EditorTemplates编辑弹出窗口不显示在自定义编辑模板中
问题描述:
我有一个使用AJAX DATABINDING的网格。 当我使用TEMPLATENAME SPECIFIED发出POPUP EDITING命令时,我的嵌套编辑器模板没有填充。Telerik MVC Grid中的嵌套EditorTemplates编辑弹出窗口不显示在自定义编辑模板中
我的模型
namespace eGate.BackOffice.WebClient.Model
{
public class TemplateTesterModel
{
public int TemplateModelId { get; set; }
public string TemplateModelName { get; set; }
public List<UserRole> UserRoles { get; set; }
}
}
{
public class TemplateTesterModels : List<TemplateTesterModel>
{
}
}
我的视图
@model eGate.BackOffice.WebClient.Model.TemplateTesterModels
@Html.EditorFor(m=>m)
@(Html.Telerik().Grid<eGate.BackOffice.WebClient.Model.TemplateTesterModel>()
.Name("Grid")
.DataKeys(keys => { keys.Add(m=>m.TemplateModelId); })
.Columns(columns =>
{
columns.Bound(o => o.TemplateModelId);
columns.Bound(o => o.TemplateModelName).Width(200);
columns.Bound(o => o.UserRoles).ClientTemplate(
"<# for (var i = 0; i < UserRoles.length; i++) {" +
"#> <#= UserRoles[i].RoleName #> <#" +
"} #>")
;
columns.Command(commands =>
{
commands.Edit().ButtonType(GridButtonType.Text);
}).Width(180).Title("Commands");
})
.DataBinding(dataBinding => dataBinding.Ajax()
.Select("_SelectAjaxEditing", "TemplateTester")
.Insert("_InsertAjaxEditing", "Grid")
.Update("_SaveAjaxEditing", "TemplateTester")
.Delete("_DeleteAjaxEditing", "TemplateTester")
)
.Editable(editable => editable.Mode(GridEditMode.PopUp).TemplateName("TemplateTesterModel"))
)
我的控制器
namespace eGate.BackOffice.WebClient.Controllers
{
public class TemplateTesterController : Controller
{
public ActionResult Index()
{
return View(GetTemplateTesters());
//return View(new GridModel(GetTemplateTesters()));
}
private TemplateTesterModels GetTemplateTesters() {
TemplateTesterModels returnme = new TemplateTesterModels();
returnme.Add(new TemplateTesterModel());
returnme[0].TemplateModelId = 0;
returnme[0].TemplateModelName = "Template Tester 0";
returnme[0].UserRoles = new List<UserRole>();
returnme[0].UserRoles.Add(new UserRole() { RoleName = "Role1", IsChecked = true, Description = "Role for 1" });
returnme[0].UserRoles.Add(new UserRole() { RoleName = "Role2", IsChecked = false, Description = "Role for 2" });
returnme[0].UserRoles.Add(new UserRole() { RoleName = "Role3", IsChecked = false, Description = "Role for 3" });
return returnme;
}
[GridAction]
public ActionResult _SelectAjaxEditing()
{
return View(new GridModel(GetTemplateTesters()));
}
[AcceptVerbs(HttpVerbs.Post)]
[GridAction]
public ActionResult _SaveAjaxEditing(int id)
{
return View(new GridModel(GetTemplateTesters()));
}
[GridAction]
public ActionResult _InsertAjaxEditing(){
return View(new GridModel(GetTemplateTesters()));
}
[AcceptVerbs(HttpVerbs.Post)]
[GridAction]
public ActionResult _DeleteAjaxEditing(int id)
{
return View(new GridModel(GetTemplateTesters()));
}
}
}
我EditorTemplates 共享/ EditorTemplates/TemplateTesterModel.cshtml
@model eGate.BackOffice.WebClient.Model.TemplateTesterModel
<div>TemplateTesterModel Editor</div>
<div>@Html.EditorFor(m=>m.TemplateModelId)</div>
<div>@Html.EditorFor(m=>m.TemplateModelName)</div>
<div>Roles</div>
<div>@Html.EditorFor(m=>m.UserRoles)</div>
共享/ EditorTemplates/UserRole.cshtml
@model eGate.BackOffice.WebClient.Model.UserRole
<div>
I can has user role?
@Html.CheckBoxFor(m=>m.IsChecked)
</div>
这使得出这样:
正如你可以看到,通过下调之前电网滤波器的@ Html.EditFor声明到预期的userrole EditorTemplate。此外,我们可以看到角色数据位于网格中,因为它显示在角色列中。
但点击编辑窗口,这就是结果:
正如你可以看到模板的UserRole不与我们编辑TemplateTesterModel的财产的UserRole角色填充。
我错过了什么吗?为什么.UserRoles属性未填充到telerik网格弹出窗口中。?
事实证明,这是他们序列化对象以使mvc网格工作的方式(已知)的副产品。总之,它打破了一些黑魔法MV3应该提供的。解决方法涉及劫持事件并通过javascript手动构建HTML表单。 –