如何将模型传递给模板

时间:2013-10-10 15:27:57

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

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

<%@ 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" })); 
})

%GT;

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

"3F2504E0-4F89-11D3-9A0C-0305E82C3301"从一个单元格更改为单元格,但我们不确定如何动态地将其传递给此模板。任何帮助将受到高度赞赏。模板在Cell EditorTemplate中指定,或通过[UIHint("....")]

指定托管类中的属性

非常感谢任何建议。

2 个答案:

答案 0 :(得分:2)

它对我有用。

在网格中使用事件:

.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#\" />");

答案 1 :(得分:1)

您的数据在客户端动态变化,意味着您应该使用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)。希望能解决你的问题。