C# MVC如何设置DropDownList后面的模型值
我有一个C# MVC如何设置DropDownList后面的模型值,c#,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,我有一个DropDownList,它不能作为DropDownListFor使用,所以它被放弃了 如何将DropDownList附加为视图中项目的模型值。这是我的密码 @model DirectoryMVC.Models.get_administrators_Result @{ List<SelectListItem> listItems2 = new List<SelectListItem>(); listItems2.Add(new SelectL
DropDownList
,它不能作为DropDownListFor
使用,所以它被放弃了
如何将DropDownList附加为视图中项目的模型值。这是我的密码
@model DirectoryMVC.Models.get_administrators_Result
@{
List<SelectListItem> listItems2 = new List<SelectListItem>();
listItems2.Add(new SelectListItem { Text = "Mr.", Value = "Mr." });
listItems2.Add(new SelectListItem { Text = "Ms.", Value = "Ms." });
listItems2.Add(new SelectListItem { Text = "Dr.", Value = "Dr." });
listItems2.Add(new SelectListItem { Text = "Miss", Value = "Miss" });
listItems2.Add(new SelectListItem { Text = "Mrs.", Value = "Mrs." });
listItems2.Add(new SelectListItem { Text = "Rev.", Value = "Rev." });
foreach (SelectListItem li2 in listItems2)
{
if (li2.Value == this.Model.title)
{
li2.Selected = true;
}
}
ViewBag.Titles = listItems2;
List<SelectListItem> admins = ViewBag.JobTitle;
foreach (SelectListItem item in admins)
{
if (this.Model.admin_code.TrimEnd(' ') == item.Value)
{
item.Selected = true;
}
else
{
item.Selected = false;
}
}
ViewBag.JobTitle = admins;
}
@Html.HiddenFor(m=>m.admin_id)
<div class="col-md-1">@Html.DropDownList("Titles")
</div>
<div class="col-md-2"> @Html.TextBoxFor(m => m.first_name)
</div>
<div class="col-md-2"> @Html.TextBoxFor(m => m.last_name)
</div>
<div class="col-md-3"> @Html.DropDownList("JobTitle")
</div>
<div class="col-md-3 pull-left"> @Html.TextBoxFor(m => m.email)
</div>
@model DirectoryMVC.Models.get\u administrators\u结果
@{
List listItems2=新列表();
添加(新建SelectListItem{Text=“Mr.”,Value=“Mr.”});
添加(新建SelectListItem{Text=“Ms.”,Value=“Ms.”});
添加(新建SelectListItem{Text=“Dr.”,Value=“Dr.”});
添加(新建SelectListItem{Text=“Miss”,Value=“Miss”});
添加(新建SelectListItem{Text=“Mrs.”,Value=“Mrs.”});
添加(新建SelectListItem{Text=“Rev.”,Value=“Rev.”);
foreach(在listItems2中选择ListItem li2)
{
if(li2.Value==this.Model.title)
{
li2.所选=真;
}
}
ViewBag.Titles=listItems2;
列表管理员=ViewBag.JobTitle;
foreach(在管理员中选择ListItem项)
{
if(this.Model.admin_code.TrimEnd(“”)=item.Value)
{
item.Selected=true;
}
其他的
{
item.Selected=false;
}
}
ViewBag.JobTitle=管理员;
}
@Html.HiddenFor(m=>m.admin\u id)
@Html.DropDownList(“标题”)
@Html.TextBoxFor(m=>m.first_name)
@Html.TextBoxFor(m=>m.last_name)
@Html.DropDownList(“JobTitle”)
@Html.TextBoxFor(m=>m.email)
在控制器中,输入管理员代码和管理员标题。这两个下拉列表为空。查看页面时正确选择了这些值,但它们没有正确映射到表单post上的模型。如果这仍然是您正在使用的模型:
public partial class get_administrators_Result
{
public int admin_id { get; set; }
public string first_name { get; set; }
public string last_name { get; set; }
public string title { get; set; }
public string email { get; set; }
}
然后您只需将@Html.DropDownList(“Titles”)
更改为@Html.DropDownList(“Title”)
。要使模型绑定工作,表单元素需要与模型属性具有相同的名称
顺便说一句,你真的应该使用
DropDownListFor
——我知道第一次它对你不太管用,但我强烈建议你重新使用它。为什么在使用@Html.DropDownListFor
时它不管用?如果要将标题
下拉列表绑定到模型属性,则无需自行设置该下拉列表的选定值,这样就可以避免使用foreach(listItems2中的SelectListItem li2)
。使用@Html.DropDownList(“title”,ViewBag.Titles)
实现这一点。可能会对您有所帮助。您没有向Html.DropDownList
函数提供任何值。。因此,我根本不确定您是如何在呈现的页面中看到任何值的。@granit您可以在这里看到我前面的问题。我一起放弃了它@granit使用@Html.DropDownList(“title”,ViewBag.Titles)
不起作用<代码>“title”是模型属性,“Titles”
是视图包。尝试代码时收到的错误为“具有键'title'的ViewData项的类型为'System.String',但必须为'IEnumerable'
@SamAxe您可以看到我在列表中循环,如果它与属性值和SelectListItem值匹配,则将所选值设置为true。这也需要更改:ViewBag.Titles=listItems2代码>至ViewBag.Title=listItems2
属性也必须是Title
,对吗?很好。虽然,就个人而言,我更喜欢指定DropDownList for使用的IEnumerable,而不是依赖类似名称的ViewBag项目-这些神奇的关系在我看来太易变了。@sleeyuen我发现这些东西可能非常易变。DropDownListFor是一场噩梦,这个解决方案奏效了。