我的表单下拉框中有一个类别列表。我想根据所选类别下拉列表选择不同的选择列表,而不是回发和所有这些。
我在我的控制器中创建了一个完成工作的方法:
[HttpPost]
public ActionResult GetItemByCategoryId(int category_id)
{
var itemsobject = DB.items.Where(s => s.category_id == category_id).ToList();
SelectList item_id = new SelectList(itemsobject, "item_id", "item_name");
ViewBag.item_id = item_id;
return Json(itemsobject, JsonRequestBehavior.AllowGet);
}
以下是我的观点:
<div class="form-group">
<label class="control-label col-md-4">category name</label>
<div class="col-md-4">
@Html.DropDownListFor(a => a.category_id, (SelectList)ViewBag.category_id)
</div>
</div>
<div class="form-group">
<div class="col-md-4">
<div class="col-md-4" id="mydiv">
</div>
</div>
</div>
并且,这是一个Javascript函数,它在下拉列表更改事件中触发,并对返回JSON结果的action方法执行ajax调用。
<script language="javascript" type="text/javascript">
$(function () {
$("#category_id").change(function() {
c = $(this).val();
alert(c);
$.ajax({
url: "@Url.Action("GetItemByCategoryId", "Category")",
data: { "category_id": c },
cache: false,
DataType: 'json',
type: "POST",
success: function (data) {
$("#mydiv").text(data[0].Text);
},
error: function () {
alert("failed");
}
});//end ajax
});//end change event
});//end document loading
</script>
但是,这不起作用。我的警报只是弹出一个失败。 你能告诉我如何实现这个目标吗?
答案 0 :(得分:1)
问题在于行动
return Json(itemsobject, JsonRequestBehavior.AllowGet);
它必须在json
中返回selectListreturn Json(item_id, JsonRequestBehavior.AllowGet);
答案 1 :(得分:0)
用此替换您的javascript代码。不推荐使用.ajax()
方法的方式。
<script language="javascript" type="text/javascript">
$(function () {
$("#category_id").change(function() {
var url = '@Url.Action("GetItemByCategoryId", "Category")';
$.post(url,
{
category_id: $(this).val()
}).done(function (data) {
$("#mydiv").text(data[0].Text);
}).fail(function (xhr) {
var json = $.parseJSON(xhr.responseText);
alert("Error: " + json.Error);
});
});//end change event
});//end document loading
</script>
答案 2 :(得分:-1)
发表强>
public ActionResult GetItemByCategoryId(int category_id)
{
**var itemsobject** = DB.items.Where(s => s.category_id == category_id).ToList();
SelectList item_id = new SelectList(itemsobject, "item_id", "item_name");
ViewBag.item_id = item_id;
return Json(itemsobject, JsonRequestBehavior.AllowGet);
}
转换列表中的Var,这对我有用.....
获取强>
public ActionResult FillCity(int state)
{
using (ASAP_DB_Context DBContext = new ASAP_DB_Context())
{
List<city> citiesList = new List<city>();
var cities = DBContext.Cities.Where(c => c.State_Id == state);
foreach (var city in cities)
{
citiesList.Add(new city { City_Id = city.City_Id, CityName=city.CityName, State_Id = city.State_Id });
}
return Json(citiesList, JsonRequestBehavior.AllowGet);
}
}