我有三个下拉列表,每个下拉列表取决于先前的选择(股票,类别,项目)。 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_id", "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_id", "item_name");
return Json(data, JsonRequestBehavior.AllowGet);
}
视图:
<div class="form-group">
@Html.LabelFor(model => model.stock_id, "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, "cat_id", htmlAttributes: new { @class = "control-label col-md-2"})
<div class="col-md-10">
@Html.DropDownList("cat_id", null, htmlAttributes: new { @class = "form-control", @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, "item_id", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("item_id", null, htmlAttributes: new { @class = "form-control", @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',
type: "GET",
dataType: "JSON",
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()”函数处停止,并且不会填充第二个下拉列表 有什么帮助吗?
答案 0 :(得分:0)
这会有所帮助。
控制器-我从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 categories, 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 categories, 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, "Id", "Name");
ViewBag.stock_id = new SelectList(stocks, "Id", "Name");
}