c#下拉列表回发
本文关键字:下拉列表 | 更新日期: 2023-09-27 17:53:34
我使用MVC ASP创建一系列由SQL存储过程填充的下拉列表。但是,每个连续的下拉列表都需要通过将前一个列表的选择作为参数传递给过程调用来填充。如何POST使用
创建的列表的选择@Html.DropDownListFor(x => x.environmentName, new SelectList(Model.environmentName))
?
我试图将其保存到一个modelView,然后再次将视图传递给控制器,但我觉得这是一个糟糕的方式去做它。
这是我为3个级联下拉列表编写的JQuery解决方案,其中包含对控制器的ajax回调,以根据前面的选择填充下一个列表。这可能会让你朝着正确的方向前进。
Select: <select id="category" style="width: 150px">
<option></option>
@foreach (string cat in ViewBag.Categories)
{
<option>@cat</option>
}
</select><span id="errorforcategory" style="color: red"></span>
<select id="subcategory1" disabled="disabled" style="width: 150px"><option></option> </select>
<select id="subcategory2" disabled="disabled" style="width: 150px"><option></option></select>
<script type="text/javascript">
$("#category").change(function () {
$("#subcategory1").load('@Url.Action("GetSubCategory")' + "?category=" + $("#category").val());
$('#subcategory2').empty();
$('#subcategory2').append($("<option></option>"));
$('#subcategory2').attr('disabled', 'disabled');
}).ajaxStop(function () {
if ($('#subcategory1 option').size() > 2) {
$('#subcategory1').attr('disabled', '');
} else {
$('#subcategory1').attr('disabled', 'disabled');
}
});
$("#subcategory1").change(function() {
if ($("#subcategory1").val().trim()) {
$("#subcategory2").load('@Url.Action("GetSubCategory")' + "?category=" + $("#category").val() + "&subcategory=" + $("#subcategory1").val());
} else {
$('#subcategory2').empty();
$('#subcategory2').attr('disabled', 'disabled');
}
}).ajaxStop(function() {
if ($('#subcategory2 option').size() > 2) {
$('#subcategory2').attr('disabled', '');
} else {
$('#subcategory2').attr('disabled', 'disabled');
}
});
然后在你的控制器中,你可以使用任何你喜欢的方法调用你的Stored Proc,然后构建你的结果选项文本。
public string GetSubCategory(string category, string subcategory)
{
string returnval = "<option></option>";
if (!string.IsNullOrEmpty(subcategory))
{
foreach (
var cat in
db.Categories.Where(c => c.category1 == category && c.subcategory1 == subcategory)
.Select(c => c.subcategory2)
.Distinct())
{
if (!string.IsNullOrEmpty(cat.Trim()))
returnval += "<option>" + cat + "</option>";
}
return returnval;
}
return Enumerable.Aggregate(db.Categories.Where(c => c.category1 == category).Select(c => c.subcategory1).Distinct().Where(cat => !string.IsNullOrEmpty(cat.Trim())), returnval, (current, cat) => current + ("<option>" + cat + "</option>"));
}