我有一个动态下拉列表,其中填充了数据库中的数据,如
for(int i=0;i<count;i++)
{
@Html.DropDownListFor(m => m.GetTimeSheetDetails[i].PROJ_ID,
(SelectList)ViewBag.ProjectList,
"-- Choose a Project --",
new { @class = "ddlProjectvalue" })
}
我通过编写
之类的方法来填充数据public SelectList getProjects()
{
IEnumerable<SelectListItem> projectslist = (from proj in res.PROJECTs
where proj.IS_DELETED == "N"
select proj
).AsEnumerable()
.Select(projt => new SelectListItem()
{
Text = projt.NAME,
Value = projt.ID.ToString()
});
return new SelectList(projectslist, "Value", "Text", PROJ_ID);
}
我调用了控制器并存储在ViewBag.Projects中,如
ViewBag.ProjectList = timesheetModel.getProjects();
// Ex: Contain list like item1,item2,item3
现在我想要在Dynamic Dropdown列表中 如果我们从First Dropdowlist中选择一个项目不应该显示在Second Dropdown列表中(例如,如果我们选择了item1,则不应该在第二个下拉列表中显示item1),并且第三个下拉列表中的下一个不应该显示在两个下拉列表中。 我怎么能在Asp.net MVC中做到这一点?请帮助我,我没有得到任何想法。
///被修改
我试过像
这样的剧本 <script>
$(document).ready(function () {
$('.ddlProjectvalue').change(function () {
var selectedValue = $(this).val();
if (selectedValue != null && selectedValue != '') {
debugger;
@* location.href = '@Url.Action("GetDDLData", "Employer")?selectedValue=' + selectedValue;*@
$.getJSON('@Url.Action("/Employer/GetDDLData")', { selectedValue: selectedValue }, function (jsondata) {
var dllSecond = $('.ddlProjectvalue');
dllSecond.empty();
alert(selectedValue);
$.each(jsondata, function (index, data) {
dllSecond.append($('<option/>', {
value: data.value,
text: data.text
}));
});
});
}
});
});
</script>
我在雇主控制器中添加了Json Result
public ActionResult GetDDLData(string selectedValue)
{
int projectid = Convert.ToInt32(selectedValue);
IEnumerable<SelectListItem> projectslist = (from proj in db.PROJECTs where proj.IS_DELETED == "N" && proj.ID != projectid select proj).AsEnumerable().Select(projt => new SelectListItem() { Text = projt.NAME, Value = projt.ID.ToString() });
var result= new SelectList(projectslist, "Value", "Text", tm.PROJ_ID);
return Json(result,JsonRequestBehavior.AllowGet);
}
仍然没有得到它,错在哪里?
答案 0 :(得分:1)
您正在寻找的是级联下拉列表。
你可以做的是在第一个下拉列表中选择调用ajax并使用你的逻辑来过滤第二个下拉列表的选择。
查看强>
@Html.DropDownListFor(m => m.GetTimeSheetDetails[i].PROJ_ID,
(SelectList)ViewBag.ProjectList,
"-- Choose a Project --",
new { @id = "ddlProjectvalue" })
根据第一次选择过滤下方的下拉列表。
@Html.DropDownListFor(m => m.GetTimeSheetDetails[i].PROJ_ID,
(SelectList)ViewBag.ProjectList,
"-- Choose a Project --",
new { @id = "ddlSecond" })
<script type="text/javascript">
$('#ddlProjectvalue').change(function () {
var selectedValue = $(this).val();
if (selectedValue != null && selectedValue != '') {
$.getJSON('@Url.Action("/YourController/FilterSecondDDL")', { selectedValue: selectedValue }, function (jsondata) {
var dllSecond = $('#ddlSecond');
dllSecond.empty();
$.each(jsondata, function (index, data) {
dllSecond.append($('<option/>', {
value: data.value,
text: data.text
}));
});
});
}
});
</script>
<强>控制器强>
public ActionResult FilterSecondDDL(string selectedValue)
{
//filter and return json.
return Json();
}