如何解决MVC-填充下拉列表取决于另一个选择
我有三个下拉列表,每个下拉列表取决于先前的选择(股票,类别,项目)。 Viewbag从控制器填充的每个下拉列表 控制器:
ViewBag.stock_id = new SelectList(db.stocks,"stock_id","stock_name");
ViewBag.cat_id = new SelectList(db.categories,"cat_id","cat_name");
ViewBag.item_id = new SelectList(db.items,"item_id","item_name");
[HttpGet]
public ActionResult UpdateitemDrop1(int stock_id)
{
var fromDatabaseEF = new SelectList(db.categories.Where(x => x.stock_id == stock_id).ToList(),"cat_name");
SelectList vb = fromDatabaseEF;
return Json(vb,JsonRequestBehavior.AllowGet);
}
[HttpGet]
public ActionResult UpdateitemDrop2(int cat_id)
{
SelectList data= new SelectList(db.items.Where(x => x.cat_id == cat_id).ToList(),"item_name");
return Json(data,JsonRequestBehavior.AllowGet);
}
视图:
<div class="form-group">
@Html.LabelFor(model => model.stock_id,htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("stock_id",null,htmlAttributes: new { @class = "form-control",@id = "stock_id" })
@Html.ValidationMessageFor(model => model.employee_id,"",new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.cat_id,htmlAttributes: new { @class = "control-label col-md-2"})
<div class="col-md-10">
@Html.DropDownList("cat_id",@id = "cat_id",disabled = "disabled" })
@Html.ValidationMessageFor(model => model.employee_id,new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.item_id,htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("item_id",@id = "item_id",disabled = "disabled" })
@Html.ValidationMessageFor(model => model.item_id,new { @class = "text-danger" })
</div>
</div>
<script>
$(function () {
$('#stock_id').change(function () {
var select = $('#cat_id');
var stockV = $("#stock_id :selected").val();
alert();
$.ajax({
url: '/additions/UpdateitemDrop1',type: "GET",dataType: "JSON",data: { stock_id: stockV },success: function (vb) {
select.empty();
$(vb).each(function () {
select.add($("<option></option>").val(vb.cat_id).html(vb.cat_name));
});
}
});
});
$('#cat_id').change(function () {
var catV = $("#cat_id :selected").val();
$('#item_id').prop("disabled",false);
alert();
$.ajax({
url: '/additions/UpdateitemDrop2',data: { item_id: catV },success: function () {
$("#item_id").html("");
$("#item_id").empty();
$.each(data,function (i,items) {
$("#item_id").append(
$('<option></option>').val(items.item_id).html(items.item_name));
});
}
});
});
});
</script>
但是当我从第一个下拉列表(stock_id)中选择选项时,它会在“ empty()”函数处停止,并且不会填充第二个下拉列表 有什么帮助吗?
解决方法
这会有所帮助。
控制器-我从Index16开始。
string RemoveComments(string textWithComments)
{
StringBuilder textWithoutComments = new StringBuilder();
string[] split = text.Replace(" ",null).Split('\r','\n');
foreach (string line in split)
if (line.Length >= 2 && line[0] == '*' && line[1] == '*') continue;
else textWithoutComments.Append(line + "\r\n");
return textWithoutComments.ToString();
}
查看
public class Stock
{
public string Id { get; set; } //value
public string Name { get; set; } //text
}
public class Category
{
public string Id { get; set; }
public string Name { get; set; }
}
public class Item
{
public string Id { get; set; }
public string Name { get; set; }
}
public class ViewModel
{
public IList<Stock> StockList { get; set; }
public IList<Category> CategoryList { get; set; }
public IList<Item> ItemList { get; set; }
public string SelectedStock { get; set; }
public string SelectedCategory { get; set; }
public string SelectedItem { get; set; }
}
public class HomeController : Controller
{
[HttpGet]
public ActionResult UpdateitemDrop1(string stock_id)
{
List<Stock> stocks;
List<Category> categories;
List<Item> items;
PopulateViewBags(out stocks,out categories,out items);
var q = categories.Where(x => x.Id == stock_id).ToArray();
return Json(q,JsonRequestBehavior.AllowGet);
}
[HttpGet]
public ActionResult UpdateitemDrop2(string cat_id)
{
List<Stock> stocks;
List<Category> categories;
List<Item> items;
PopulateViewBags(out stocks,out items);
ViewBag.item_id = new SelectList(items.Where(x => x.Id == cat_id));
return Json(ViewBag.item_id,JsonRequestBehavior.AllowGet);
}
public ActionResult Index16()
{
List<Stock> stocks;
List<Category> categories;
List<Item> items;
PopulateViewBags(out stocks,out items);
var viewModel = new ViewModel { CategoryList = categories,ItemList = items,StockList = stocks };
return View(viewModel);
}
private void PopulateViewBags(out List<Stock> stocks,out List<Category> categories,out List<Item> items)
{
stocks = new List<Stock> {
new Stock { Id = "1",Name = "Stock1"},new Stock { Id = "2",Name = "Stock2"},new Stock { Id = "3",Name = "Stock3"}
};
categories = new List<Category> {
new Category { Id = "1",Name = "Category1"},new Category { Id = "2",Name = "Category2"},new Category { Id = "3",Name = "Category3"}
};
items = new List<Item> {
new Item { Id = "1",Name = "Item1"},new Item { Id = "2",Name = "Item2"},new Item { Id = "3",Name = "Item3"}
};
ViewBag.cat_id = new SelectList(categories,"Id","Name");
ViewBag.item_id = new SelectList(items,"Name");
ViewBag.stock_id = new SelectList(stocks,"Name");
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。