【问题标题】:How to pass model to editor templates如何将模型传递给编辑器模板
【发布时间】:2012-01-20 07:15:37
【问题描述】:

我正在使用带有 ajax 绑定的 Telerik MVC Grid,并且我在 InCell 编辑模式下使用编辑器模板进行网格编辑。我想将模型传递给编辑。

据我所知,如果我使用了服务器绑定,则可以将模型传递给编辑器模板。但我不确定 Ajax 绑定。

当您使用 Ajax 绑定时,是否可以将模型传递给编辑器模板?

【问题讨论】:

  • 您能否详细说明您要通过的模型
  • 假设我想传递 List 作为编辑器模板中下拉列表的模型

标签: telerik telerik-grid telerik-mvc mvc-editor-templates


【解决方案1】:

是的,你可以!它会自动完成。如果您的模板编辑器是一个列表框,您应该通过 ViewBag.XXX 属性传递列表项。 这是 ProductSelector.ascx 编辑器模板的示例:

    <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<int>" %>

<%Html.Telerik().ComboBox()
        .Name(ViewData.TemplateInfo.GetFullHtmlFieldName(string.Empty))
        .AutoFill(true)
            .BindTo(((IEnumerable<Aien.CRM.Biz.Entities.Product>)ViewBag.PossibleProducts).Select(option => new SelectListItem
            {
                Text = (option == null ? "(None)" : option.Title),
                Value = option.Id.ToString()
            }))
        .OpenOnFocus(true)
        .Render();

%>

不要忘记为相关模型属性放置一个 UiHint 属性。

【讨论】:

  • 好主意,但是没有其他方法可以将模型传递给编辑器模板或直接从编辑器模板访问它吗?
  • 将整个模型传递给编辑器模板?为什么?您可以将它传递给编辑器模板,就像您为“int”所做的那样。但如果你这样做,你的编辑器模板应该是整个模型的编辑器,而不仅仅是它的一个属性。
  • 另见:stackoverflow.com/a/16065740/85269。我还想要一种能够将模型对象直接传递给模板的方法,例如Partial(...) 调用。但是,这个选项似乎没有内置到 MVC 中,留下 ViewBag 作为剩余选项。
【解决方案2】:

还有 Telerik Mvc Grid 的新功能称为:ForeignKey,它允许您对编辑器模板进行抽象并提供简单的 SelectList(或 IEnumerable)。 Here 就是一个例子。

columns.ForeignKey(o => o.EmployeeID, (IEnumerable)ViewData["employees"], 
                   "ID", "Name").Width(230);

默认使用下拉列表,您可以通过客户端模板更改。

【讨论】:

    猜你喜欢
    • 2015-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多