我无法获得Kendo下拉列表来更新模型中的选定值

时间:2014-11-23 08:59:11

标签: c# asp.net-mvc razor kendo-asp.net-mvc

我有一个剑道下拉列表

@Html.Label("Databases: ") @(Html.Kendo().DropDownListFor(m => m.database_pk)
            .Name("database_pk")
            .BindTo(Model.databases)
            .OptionLabel("Select one...")
            .DataValueField("Value")
            .DataTextField("Text")
            .HtmlAttributes(new { @id = "database_pk", onchange = "changeDatabase()" })
        )

我的模特是

 public class DatabaseListModel
    {
        public int database_pk { get; set; }
        public List<SelectListItem> databases = new List<SelectListItem>();
    }

我遇到的主要问题是我的tabtrip LoadContentFrom属性引用了Model.database_pk值。这个想法是tabtrip中的内容会加载,具体取决于dropdownlistfor的选定值是什么..但无论我选择什么它发布的路线值是0

 @(Html.Kendo().TabStrip()
                .Name("menu")
                .Items(items =>
                    {
                        items.Add().Text("Database Info").HtmlAttributes(new { @id = "dbinfotab" }).LoadContentFrom("DatabaseInfo", "Home", new { database_pk =  Model.database_pk }).Selected(true);
                        items.Add().Text("Tables").HtmlAttributes(new { @id = "tabletab" }).LoadContentFrom("TableInfo", "Table", new { database_pk = Model.database_pk }).Selected(false);
                        items.Add().Text("Entities").HtmlAttributes(new { @id = "entitytab" }).LoadContentFrom("EntityInfo", "Entity", new { database_pk = Model.database_pk }).Selected(false);
                    })
                .Events(events =>
                    {
                        events.Select("selectMenuTabs");
                    })
    )
谁知道我做错了什么......有想法......我已经坚持了两天。 我很乐意找到一些方法来强制使用jquery中的ajax调用来重新加载标签,但我还是无法弄清楚如何从jquery重新加载内容。实际上..在jquery中它会更好..因为我有其他函数,其中id强制重新加载tabstip项目

2 个答案:

答案 0 :(得分:0)

@(Html.Kendo().TabStrip()是剃刀代码并在服务器上生成

.LoadContentFrom("DatabaseInfo", "Home", new { database_pk = Model.database_pk })

评估为(假设database_pk的初始值为零)

.LoadContentFrom("DatabaseInfo", "Home", new { database_pk = 0 })

它不会因为您在下拉列表中选择内容而改变。您可以使用ajax加载使用

从部分视图返回的html内容
var url = '@Url.Action("DatabaseInfo", "Home")';
$('#database_pk').change(function() {
  var id = $(this).val();
  $(someSelector).load(url, {database_pk: id });
}

假设你有一个方法

public ActionResult DatabaseInfo(int database_pk)

返回部分视图

注意:您应该从下拉列表中删除以下内容

.HtmlAttributes(new { @id = "database_pk", onchange = "changeDatabase()" })

设置id是没有意义的,因为它默认已经有id,你应该避免混合html标记和javascript

答案 1 :(得分:0)

斯蒂芬向我提供了我需要的一些信息,所以我接受了他的答案。但我也发布了自己的答案,因为它是一个不完整的解决方案,如果一些可怜的草皮有同样的问题,我会这样做,我会希望他们能够解决问题,而无需继续搜索更多信息。

我确实必须在jquery中这样做,答案实际上就是像Stephen建议的那样重新加载Kendo Tabstrip contentElement(感谢你指出了我正确的方向)。

我还需要一个例程,既可以选择tabtrip项目,也可以更改选择值的下拉列表。

所以我创建了一个例程,它将获取所选选项卡的索引并使用它来获取contentElement ...表单,我只是使用ajax调用的结果重置contentElement.html值。

function reloadTabstripItem() {
    var selected_pk = $('#database_pk').val();
    var index =  $("#menu").data("kendoTabStrip").select().index();
    var actionurl; 
    switch (index) {
        case 0:
            actionurl = "/Home/DatabaseInfo";
            break;
        case 1:
            actionurl = "/Table/TableInfo";
            break;
        case 2:
            actionurl = "/Entity/EntityInfo";
            break;
    }
    $.ajax({
        url: "/Home/DatabaseInfo",
        type: 'GET',
        data: { database_pk: selected_pk }
    }).done(function (html) {
        $($("#menu").data("kendoTabStrip").contentElement(0)).html(html);
    });
}