我正在使用mvc 4,我在视图中有一个表单(没有绑定到模型),它使用标准的html元素。
我想从列表值中填充下拉列表(即从控制器操作返回)
也基于第一个下拉列表中的值的选择我要填充第二个下拉列表
有人可以指导
答案 0 :(得分:0)
对于第一个下拉列表,您循环遍历所有可用选项并在<option>
内添加<select>
标记,以获取第二个下拉列表,您需要进行一些下拉并隐藏/显示它们,或者您创建一个大的列表,并根据第一个列表的选择删除无效的条目。你肯定需要为第二个列表做javascript。
答案 1 :(得分:0)
如果您不想使用模型(您应该),则必须将项目添加到ViewData
我会为你找出一些东西,你可以完成剩下的工作。
在控制器内部,创建所需内容的列表对象。如果您使用的是EntityFrameWork,这看起来很熟悉。
var list = context.Table.ToList();
List<System.Web.Mvc.SelectListItem> ddlItems = new List<System.Web.Mvc.SelectListItem>();
foreach (var item in list)
{
ddlItems.Add(new SelectListItem(){ Text = item.Text, Value = item.Value.ToString()});
}
ViewData["DDLItems"] = ddlItems;
@Html.DropDownListFor(x => x.LeagueId,
new SelectList((System.Collections.IEnumerable)ViewData["DDLItems"], "Value", "Text")
, "--Select League--", new { id = "league" })
您可以使用占位符定义第二个下拉列表,直到级联效果发生。
@Html.DropDownListFor(x => x.DivisionId, Enumerable.Empty<SelectListItem>(),
"--Select Division--", new { id = "ddlDivision" })
当下拉列表更改时,您将需要使用JQuery和fire和event,然后使用Ajax向控制器发出回调。 Theres 2348239在线关于进行Ajax
调用的示例,知道如何做到这一点,因为它一直在MVC中完成。
我会让你想出那部分。一个提示,在Ajax调用中,您可以将数据传递给控制器。像这样的data: { leagueId: value }
,其中value是你想要级联的下拉列表的值。 leagueId
必须匹配控制器所期望的参数的类型和名称。
从控制器返回Json
对象,如此......
public JsonResult GetDivisions(int leagueId)
{
var division = //similar to before, fill a list.
return Json(divisions, JsonRequestBehavior.AllowGet);
}
然后在Ajax调用的成功函数中,您将填充Second下拉列表。
success: function (data) {
$.each(data, function (index, item)
$('#ddlDivision')
.append($('<option></option>')
.val(item.Value)
.html(item.Text))
item.Value
和item.Text
可以是任何内容,只要您返回的Json作为Text
和Value
的属性
... IE
var divisions = (from x in context.Division
select new
{
Text = league + " " + x.Region,
Value = x.DivisionId
}).ToList();