我刚刚开始使用MVC,我想在我的索引页面上显示两个DropDownLists - 索引视图并使用数据库中的唯一状态名称填充第一个下拉列表,并根据第一个下拉列表中的选择填充第二个下拉列表来自数据库表中名称的数据,其中state等于第一个下拉列表中选择的状态。
我已经创建了Model类,下面是我的控制器:
public ActionResult Index()
{
MyRecordContext rc = new MyRecordContext();
List<MyRecord> rl = rc.MyRecords.ToList();
return View(rl);
}
在我看来,Index.shtml我有以下内容来显示第一个下拉列表:
@if (Model != null)
{
<select id="ddlState">
@foreach (var item in Model)
{
<option>
@item.State
</option>
}
</select>
}
现在我如何确保只从数据库中选择不同的状态,如何根据第一个选择创建和填充第二个下拉列表?有人可以指点我正确的方向吗? 谢谢
更新
为了在下拉列表中显示不同的状态,我按以下方式修改了控制器:
public ActionResult Index()
{
MyRecordContext rc = new MyRecordContext();
List<String> sl = rc.MyRecords.Select(s => s.State).Distinct().ToList();
return View(sl);
}
答案 0 :(得分:0)
在控制器中添加以下行:
ViewBag.ddlState= new SelectList(rl, "valueFieldName", "textFieldName");
在视图中:
@using (Ajax.BeginForm("Index2", new AjaxOptions { UpdateTargetId = "updateTarger" }))
{
@Html.DropDownList("ddlState", null, String.Empty, new { onchange ="$(this.form).submit()"})
}
<div id="updateTarger"></div>
创建方法:
public ActionResult Index2(string ddlState) // ddlState = value from select, type depends on value
{
...
ViewBag.ddlState2 = new SelectList(rl2, "valueFieldName", "textFieldName");
return View();
}
和部分观点:
@{
Layout = null;
}
@Html.DropDownList("ddlState2", null, String.Empty, new { onchange ="$(this.form).submit()"})
您还需要包含"~/Scripts/jquery.unobtrusive-ajax.js"
更改后首先选择它会向Index2方法发送ajax请求。作为回应,您将获得第二个选择,它将放在div#updateTarger
答案 1 :(得分:0)
为了在下拉列表中显示不同的状态,我按以下方式修改了控制器:
public ActionResult Index()
{
MyRecordContext rc = new MyRecordContext();
List<String> sl = rc.MyRecords.Select(s => s.State).Distinct().ToList();
return View(sl);
}