gpt4 book ai didi

c# - 传递剑道 DropDownListFor 的值以读取另一个 DropDownListFor 的操作

转载 作者:行者123 更新时间:2023-11-30 20:47:38 24 4
gpt4 key购买 nike

我有一个 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>

带有 Controller 方法签名:

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>

然后,在您的任务 Controller 中,您传入变量:

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 中为参数指定的名称必须与 Controller 函数中的名称相匹配。这种方法是我用来在应用程序中级联下拉菜单的方法,对我有用。

关于c# - 传递剑道 DropDownListFor 的值以读取另一个 DropDownListFor 的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25654662/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com