DropDownList Change() 似乎没有触发
本文关键字:Change DropDownList | 更新日期: 2023-09-27 17:55:09
所以,我已经把头撞在桌子上一天了。我知道这可能是一个简单的问题,但答案是我无法回答的。帮助?
我有一个从部分视图构建的模态上的下拉列表列表。我需要处理 .Change() 在 DropDownList 上,将 DropDownList 中的选定文本传递给控制器中的方法,然后该方法将给我要在 ListBox 中使用的数据。 以下是我的研究引导我的代码片段。
模态函数的所有其他控件完美无缺。
谁能看到我哪里出错了,或者为我指出正确的方向?
进程控制器
// I have tried with [HttpGet], [HttpPost], and no attribute
public ActionResult RegionFilter(string regionName)
{
// Breakpoint here is never hit
var data = new List<object>();
var result = new JsonResult();
var vm = new PropertyModel();
vm.getProperties();
var propFilter = (from p in vm.Properties
where p.Region == regionName && p.Class == "Comparable"
select p).ToList();
var listItems = propFilter.ToDictionary(prop => prop.Id, prop => prop.Name);
data.Add(listItems);
result.Data = data;
return result;
}
剃须刀视图
@section scripts{
@Scripts.Render("~/Scripts/ui_PropertyList.js")
}
...
<div id="wrapper1">
@using (Html.BeginForm())
{
...
<div id="fancyboxproperties" class="content">
@Html.Partial("PropertyList", Model)
</div>
...
<input type="submit" name="bt_Submit" value="@ViewBag.Title" class="button" />
}
</div>
Razor (部分视图 "PropertyList.cshtml")
...
@{ var regions = (from r in Model.Properties
select r.Region).Distinct(); }
<div>
<label>Region Filter: </label>
<select id="ddl_Region" name="ddl_Region">
@foreach (var region in regions)
{
<option value=@region>@region</option>
}
</select>
</div>
// ListBox that needs to update after region is selected
<div>
@Html.ListBoxFor(x => x.Properties, Model.Properties.Where(p => p.Class == "Comparable")
.Select(p => new SelectListItem { Text = p.Name, Value = p.Id }),
new { Multiple = "multiple", Id = "lb_C" })
</div>
...
JavaScript (ui_PropertyList.js)
$(function () {
// other events that work perfectly
...
$("#ddl_Region").change(function () {
$.getJSON("/Process/RegionFilter/" + $("#ddl_Region > option:selected").attr("text"), updateProperties(data));
});
});
function updateProperties(data, status) {
$("#lb_C").html("");
for (var d in data) {
var addOption = new Option(data[d].Value, data[d].Name);
addOption.appendTo("#lb_C");
}
}
传递给
$.getJSON
方法的回调函数是错误的。您需要传递对函数的引用,而不是调用它。
试试这个:
$.getJSON("/Process/RegionFilter/" + $("#ddl_Region > option:selected").text(), updateProperties);
此外,为了获取所选下拉选项的文本,您需要使用 text()
函数:
$("#ddl_Region > option:selected").text()
请参阅文档