将kendo DropDownListFor的值传递给另一个DropDownList For的读取操作
本文关键字:For DropDownList 读取 操作 另一个 kendo DropDownListFor 值传 | 更新日期: 2023-09-27 18:20:37
我有一个DropDownListFor组件,它有一个从数据库获取值的读取操作。但是,我想根据另一个DropDownListFor的值来过滤这些值。
这是DropDownListFor组件,它具有过滤值
<div class="editor-field">
@(Html.Kendo().DropDownListFor(model => model.ReleaseID)
.DataTextField("Value")
.DataValueField("Key")
.DataSource(ds => ds
.Read(read=>read.Action("GetReleases", "Task"))
)
)
@Html.ValidationMessageFor(model => model.ReleaseID)
</div>
我想做的是将ReleaseID的值传递到另一个DropDownListFor的读取操作中。我试着这样做:
<div class="editor-field">
@(Html.Kendo().DropDownListFor(model => model.MarketModelID)
.Events(e => e.Select("onSelectMarketModel"))
.Template("<span data-title='Model Description: #: data.Item3 #'>#: data.Item2 # </span>")
.DataTextField("Item2")
.DataValueField("Item1")
.DataSource(ds => ds
.Read(read => read.Action("GetMarketModels", "Task", new { release = Model.ReleaseID }))
))
@Html.ValidationMessageFor(model => model.MarketModelID)
</div>
带有控制器方法签名:
public JsonResult GetMarketModels(int? release)
{
//code to get market models based on release
}
但是,无论顶部ReleaseID DropDownFor的选择是什么,GetMarketModels方法中的发布始终为0。我做错了什么?
谢谢。
我真的不喜欢这个例子,所以我想我应该详细说明你将如何从你所拥有的,到什么应该起作用-既为了我自己的利益,也为了你的利益,还有其他人阅读本文:
首先,您需要ReleaseID:上的Name属性
@(Html.Kendo().DropDownListFor(model => model.ReleaseID)
.Name("ReleaseID") // <-- needs this line added
.DataTextField("Value")
.DataValueField("Key")
.DataSource(ds => ds
.Read(read=>read.Action("GetReleases", "Task"))
)
)
接下来,您需要输入.Data()
,指定一个提供ReleaseID的函数,从另一个下拉列表中指示您正在执行.ServerFiltering(true)
和.Cascade
,并创建您指定的函数,以Json格式返回级联中使用的发布ID:
@(Html.Kendo().DropDownListFor(model => model.MarketModelID)
.Events(e => e.Select("onSelectMarketModel"))
.Template("<span data-title='Model Description: #: data.Item3 #'>#: data.Item2 # </span>")
.DataTextField("Item2")
.DataValueField("Item1")
.DataSource(source =>
{
source.Read(read =>
{
read.Action("GetMarketModels", "Task").Data("filterMarket");
})
.ServerFiltering(true);
})
.CascadeFrom("ReleaseID") // <-- "Name" attribute, from above
.Value(Model.MarketModelID != null ? Model.MarketModelID.ToString() : "1")
)
<script>
function filterMarket() {
return {
strReleaseID : $("#ReleaseID").val()
}
}
</script>
然后,在任务控制器中,输入变量:
public JsonResult GetMarketModels(string strReleaseID)
{
int releaseID = int.Parse(strReleaseID);
var data = db.MarketModels.Where(t => t.ReleaseID == releaseID).ToList();
return Json(data, JsonRequestBehavior.AllowGet);
}
请注意,您在JavaScript中为参数指定的名称必须与控制器函数中的名称匹配。这个方法是我在应用程序中用来级联下拉列表的方法,对我来说很有效。
您需要使用级联DropDownLists。在这里你可以找到一个如何创建级联DropDownLists:的例子
级联下拉列表