【问题标题】:How to pass a model to a Template如何将模型传递给模板
【发布时间】:2013-10-10 15:27:57
【问题描述】:

我们一直在努力将值传递给以下模板:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyCuteWeb.Areas.Admin.Models.DisplayType>" %>

<%= Html.Kendo()
.DropDownList()
.Name(ViewData.TemplateInfo.GetFullHtmlFieldName(string.Empty))
.DataTextField("Name")
.DataValueField("Value")
.DataSource(source => 
{ 
    source.Read(read => 
        read.Action("GetSelectedProperties",
            "UserQueryTypes", 
            new { id="3F2504E0-4F89-11D3-9A0C-0305E82C3301" })); 
})

%>

此模板调用AJAX 服务来获取可能的下拉值列表,但AJAX 服务必须接受一个参数,该参数将从Kendo GridView 中的网格单元传递。我们不确定如何传递这个参数。

"3F2504E0-4F89-11D3-9A0C-0305E82C3301" 从一个单元格到另一个单元格会发生变化,但我们不确定如何动态地将它传递给这个模板。任何帮助将不胜感激。模板在 Cell EditorTemplate 中指定,或者通过 [UIHint("....")] 在宿主类中指定属性来指定

任何建议将不胜感激。

【问题讨论】:

    标签: c# asp.net ajax kendo-ui


    【解决方案1】:

    它对我有用。

    在网格中使用事件:

    .Events(e => e.DataBound("On_DataBound"))   
    

    这是我的事件的 js 函数:

    function On_DataBound(e) {
        var data = e.sender._data;
    
        for (var i = 0; i < data.length; i++) {
            var kendoId = data[i].uid;
            var categoryId = data[i].UserQueryTypeID;
    
            $("#MainProp_" + categoryId).kendoDropDownList({
                dataTextField: "Name",
                dataValueField: "Value",
                autoBind: true,
                change: function(e) {
                    var value = this.value();
                    var catID = $(e.sender.element).attr("data-categoryID")
    
                    $.post("/UserQueryTypes/SetKeyDetailField", { categoryId: catID, keyDetailField: value }, function (data) { if (data != "true") alert(data); });
                },
                dataSource: {
                    transport: {
                        read: {
                            dataType: "json",
                            url: "/UserQueryTypes/GetSelectedProperties?categoryID=" + categoryId
                        }
                    }
                }
            });
        }
    }
    

    在网格中使用模板:

    col.Bound(b => b.UserQueryTypeID).ClientTemplate("<input id=\"MainProp_#=UserQueryTypeID#\" data-categoryID=\"#=UserQueryTypeID#\" />");
    

    【讨论】:

      【解决方案2】:

      您的数据在客户端动态变化,意味着您应该使用 javascript ,这应该让您了解如何实现它:

      <%= Html.Kendo()
      .DropDownList()
      .Name(ViewData.TemplateInfo.GetFullHtmlFieldName(string.Empty))
      .DataTextField("Name")
      .DataValueField("Value")
      .DataSource(source => 
      { 
          source.Read(read => 
          read.Action("GetSelectedProperties","UserQueryTypes")).Data("getId"); 
      })
      %>
      <script>
      function getId() {
          return {
              id: $("#inputbox1").val() //replace $("#inputbox1").val() with code which get the proper id from grid.
          };
      }
      </script>
      

      也检查此示例 (Cascading DropDownList)。希望能解决您的问题。

      【讨论】:

      • 感谢您的回复,但是我在哪里可以得到$("#Inputbox1") 的 ID,因为它在不同单元格之间变化。此模板用于在网格的一个单元格内生成下拉菜单。这是如何将此 ID 从网格视图传递到模板的问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-17
      • 1970-01-01
      • 2011-09-14
      • 1970-01-01
      • 1970-01-01
      • 2021-07-26
      • 2017-09-20
      相关资源
      最近更新 更多