SWa*_*SWa 0 asp.net-mvc asp.net-mvc-5
我有以下ViewModel
public class ContactAddViewModel
{
string _title;
public ContactAddViewModel()
{
var titles = new List<SelectListItem>()
{
new SelectListItem() { Value = "Mr", Text= "Mr" },
new SelectListItem() { Value= "Miss", Text="Miss" },
new SelectListItem() { Value = "Mrs", Text= "Mrs" },
new SelectListItem() { Value = "Ms", Text = "Ms" },
new SelectListItem() { Value = "Dr", Text = "Dr" }
};
Titles = titles;
}
[Required]
[Display(Name = "Title")]
public string Title { get; set; }
public IEnumerable<SelectListItem> Titles { get; set; }
...
Run Code Online (Sandbox Code Playgroud)
在控制器中调用:
var ctc = new ContactAddViewModel()
{
Title = contact.Title.Trim()
};
return View(ctc);
Run Code Online (Sandbox Code Playgroud)
然后在视图中:
<div class="form-group col-md-2">
@Html.LabelFor(m => m.Title)
@Html.DropDownListFor(m => m.Title, Model.Titles, string.Empty, new { @class = "form-control placeholder-no-fix" })
@Html.ValidationMessageFor(m => m.Title, "", new { @class = "help-block" })
</div>
Run Code Online (Sandbox Code Playgroud)
但是没有选择任何选项.我已经确认标题是正确的,我甚至尝试过手动设置:
[Required]
[Display(Name = "Title")]
public string Title
{
get { return _title; }
set
{
_title = value;
foreach(var t in Titles)
{
if(t.Value == _title)
{
t.Selected = true;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
在视图中进行调试时,正确SelectListItem的Selected属性设置为true,但是在最终标记中未选中该属性.
我哪里错了? - 我有正确绑定的模型中的其他下拉列表(如果有任何差异,则具有数值).
这个会让你想要把头穿过一堵墙.您是否正好ViewBag.Title在视图中设置页面标题?这很常见.
好吧,你需要了解的第一件事是在MVC 中设置绝对插孔的Selected属性.剃刀会根据您自动选择要标记为选中的项目,并覆盖您手动设置为选中的任何项目.SelectListItemModelState
ModelState从组成值Request,ViewData/ ViewBag和最后 Model.长与短,如果你有一个关键Request,以您的问题,或者这里很重要,一个ViewBag具有相同的名称属性成员,该值将成为生成的HTML剃刀设定值.我想像ViewBag.Title你的Titles可枚举中的任何东西都不匹配,所以这就是为什么它没有被设置.您需要将此属性命名为其他内容或将其更改ViewBag.Title为类似的内容ViewBag.PageTitle.
| 归档时间: |
|
| 查看次数: |
1309 次 |
| 最近记录: |