根据MVC2中第一个下拉列表的选择值填充第二个下拉列表
Populating second DropDownList based on the selected value of first DropDownList in MVC2
我遇到了与这个问题相同的问题,所以我尝试了他的解决方案,但我无法使其工作,可能是因为我对jquery和javascript的了解很少。当我在Firebug中调试它时,我看到它在line:
处中断。$.post('<%: ResolveUrl("~/Home/GetSubcategories/")%>' + $("#ddlCats > option:selected").attr("value"), function (data) {
我有一个正确的操作,它应该接受$("#ddlCats > option:selected").attr("value")
作为参数,但它从不调用该操作,所以它永远不会返回JSON数据,所以它永远不会填充第二个DDL。我做错了什么?我错过什么了吗?
public class DdlModel
{
public long Id { get; set; }
public string Name { get; set; }
}
这里是控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
List<DdlModel> cats = DB.Category.FindCategories();
SelectList ddlCats = new SelectList(cats, "Id", "Name", cats[0].Name);
ViewData["ddlCats"] = ddlCats;
return View();
}
[HttpPost]
public JsonResult GetSubcategories(long catId)
{
var subCat = DB.Subcategory.FindSubcategories(catId);
return Json(subCat);
}
}
这是我的视图:
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<script type="text/javascript">
$(document).ready(function () {
$('#ddlCats').change(function () {
$.ajaxSetup({ cache: false });
var selectedItem = $(this).val();
if (selectedItem == "" || selectedItem == 0) {
//Do nothing or hide...?
} else {
$.post('<%: ResolveUrl("~/Home/GetSubcategories/")%>' + $("#ddlCats > option:selected").attr("value"), function (data) {
var items = "";
$.each(data, function (i, data) {
items += "<option value='" + data.ID + "'>" + data.Name + "</option>";
});
$("#ddlsubCats").html(items);
$("#ddlsubCats").removeAttr('disabled');
});
}
});
});
</script>
<div>
<div>
<h2>
Choose category:
</h2>
<%:Html.DropDownList("ddlCats", (SelectList) ViewData["ddlCats"]) %>
</div>
<div>
<h2>
and subcategory:
</h2>
<select id="ddlsubCats" name="ddlsubCats" disabled="disabled">
</select>
</div>
</div>
</asp:Content>
我正在使用:jquery-1.5.1.min.js和jquery-ui-1.8.11.custom.min.js.
非常感谢您的建议。
试试:
// TODO: make sure that the selectedItem variable represents a valid integer
// as the GetSubcategories expects it as argument:
var selectedItem = $(this).val();
if (selectedItem == "" || selectedItem == 0) {
//Do nothing or hide...?
} else {
var url = '<%= Url.Action("GetSubcategories", "Home") %>';
$.post(url, { catId: selectedItem }, function (data) {
...
});
}
注意GetSubcategories
需要一个名为catId
的参数,该参数必须是一个有效的64位整数
相关文章:
- 用每小时的差值填充数组/列表-从下拉列表中给定两个时间值
- PHP下拉列表由要使用javascript的数据库填充
- 使用两个下拉列表的值填充文本框
- 根据url填充表单选择下拉列表
- 无法使用国家/地区选择中的状态动态填充下拉列表
- 使用javascript填充Codeigniter(表单助手)-下拉列表
- 通过使用AngularJs进行分组来填充下拉列表
- 从填充了 AJAX 的下拉列表中获取控制器的操作方法中的值
- 动态下拉列表选项在添加多列后未填充
- 如何从 API 填充数据并加载到下拉列表中
- 由vbscript下拉列表填充的经典asp-javascript数组
- 使用 ajax 和 JSP Servlet 根据选择的上一个下拉列表填充下拉列表
- 根据 Wordpress 页面中的第一个下拉列表填充第二个下拉列表
- 用下拉列表填充数字数组
- 根据选择的其他下拉列表填充一个下拉列表
- 根据下拉列表填充和禁用文本字段
- 用下拉列表填充HTML页面
- 如何使用下拉列表填充文本框
- 根据上一个下拉列表填充下拉列表
- 使用已填充下拉列表填充文本框