我有一個使用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表單。 –