Forms MVC如何在不使用模型的情况下填充dropdownlist

Forms MVC如何在不使用模型的情况下填充dropdownlist,forms,asp.net-mvc-4,model-view-controller,Forms,Asp.net Mvc 4,Model View Controller,我使用的是MVC4,我在视图中有一个表单没有绑定到模型,它使用的是标准的html元素 我想从列表值(即从控制器操作返回)填充dropdownlist 同样基于从第一个dropdownlist中选择的值,我想填充第二个dropdownlist 请有人引导您循环浏览第一个下拉列表的所有可用选项,并在其中添加标签。对于第二个下拉列表,您需要创建一组下拉列表并隐藏/显示它们,或者创建一个大列表并根据第一个列表的选择删除无效条目。您肯定需要为第二个列表编写javascript 如果不想使用应该使用的模型,

我使用的是MVC4,我在视图中有一个表单没有绑定到模型,它使用的是标准的html元素

我想从列表值(即从控制器操作返回)填充dropdownlist

同样基于从第一个dropdownlist中选择的值,我想填充第二个dropdownlist


请有人引导您循环浏览第一个下拉列表的所有可用选项,并在其中添加标签。对于第二个下拉列表,您需要创建一组下拉列表并隐藏/显示它们,或者创建一个大列表并根据第一个列表的选择删除无效条目。您肯定需要为第二个列表编写javascript

如果不想使用应该使用的模型,则必须将这些项添加到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" })
然后在Ajax调用的success函数中,您将填充第二个dropdownlist

success: function (data) {                                                  

   $.each(data, function (index, item)    

 $('#ddlDivision')
            .append($('<option></option>')
            .val(item.Value)
            .html(item.Text))

当您说“从列表值”时,意味着您正在将一个值列表从控制器发送回视图,并且从该列表中希望创建一个下拉列表?如果您甚至不打算利用其功能html助手、模型绑定等,为什么要使用MVC呢。。创建视图模型以表示要显示的内容!至于你的第二个项目,谷歌MVC级联选择或在上面的搜索框中键入它,然后做一些搜索看看这个答案我同意@Stephen Mueck你应该使用MVC提供给你的很棒的助手。我不能使用模型,因为项目的设计很差。我需要提交一个简单的html表单,然后在控制器中重建模型。你说不能创建视图模型是什么意思?公共类MyViewModel{public int SomeValueToBindTo{get;set;}public SelectList TheListFoOptions{get;set;}}我想在控制器中调用一个操作方法,该方法根据第一个下拉列表的选择返回一个列表,怎么样possible@kayze然后返回类似于json列表的内容,然后使用javascript呈现它?@kayze我在回答中已经解释过,您需要进行Ajax调用。
public JsonResult GetDivisions(int leagueId)
{
    var division = //similar to before, fill a list.  

    return Json(divisions, JsonRequestBehavior.AllowGet);
}
success: function (data) {                                                  

   $.each(data, function (index, item)    

 $('#ddlDivision')
            .append($('<option></option>')
            .val(item.Value)
            .html(item.Text))
 var divisions = (from x in context.Division
                                 select new
                                 {
                                     Text = league + " " + x.Region,
                                     Value = x.DivisionId
                                 }).ToList();