通常当我使用DropDownListFor帮助器时,我选择基于ID(int)选择哪个项目,但是现在我需要根据文本(字符串)显示选择哪个项目而不是一个ID。在控制器中,模型正确设置为我想要的值:
model.Title
示例标题是“Front Office”。我的控制器中有以下代码:
ViewBag.Titles = new SelectList(jobTitles, "Name", "Name");
在视图中我有这个:
@Html.DropDownListFor(model => model.Title, ViewBag.Titles as SelectList)
DropDownList正确填充所有预期的职位,它只是没有根据 model.Title 选择正确的职位。我做错了什么?
更新
在我的代码中似乎还有其他可能出错的地方,所以我把它全部放在这里,看看我做错了什么。
控制器:
public ActionResult Edit(int id = 0)
{
StaffMember staffmember = StaffMember.SelectByID(id); // gets staff member from db
ViewBag.Titles = new SelectList(JobTitle.SelectAll(), "Name", "Name", staffmember.Title); // JobTitle.SelectAll() returns List<JobTitle>
StaffEditModel model = new StaffEditModel();
model.ID = staffmember.ID;
model.ClientID = staffmember.ClientID;
model.FirstName = staffmember.FirstName;
model.MiddleInitial = staffmember.MiddleInitial;
model.LastName = staffmember.LastName;
model.Title = staffmember.Title;
model.Phone = staffmember.Phone;
model.Email = staffmember.Email;
model.Birthday = staffmember.Birthday;
model.HireDate = staffmember.HireDate;
model.Biography = staffmember.Biography;
if (staffmember == null)
{
return HttpNotFound();
}
return View(model);
}
型号:
public class StaffEditModel
{
public int ID { get; set; }
public int ClientID { get; set; }
[Required]
[Display(Name = "First Name")]
public string FirstName { get; set; }
[Display(Name = "Middle Initial")]
public string MiddleInitial { get; set; }
[Required]
[Display(Name = "Last Name")]
public string LastName { get; set; }
public string Title { get; set; } // this is the property I'm trying to show in DropDown
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
public string Birthday { get; set; }
[Display(Name = "Hire Date")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
public string HireDate { get; set; }
public string Email { get; set; }
[MaxLength(14)]
public string Phone { get; set; }
public string Biography { get; set; }
}
查看:
@Html.DropDownListFor(model => model.Title, new SelectList(ViewBag.Titles,"Value","Text", Model.Title))
答案 0 :(得分:3)
这应该有效。 您可以从控制器
传递ViewBag.Titles
List<SelectListItem>
var jobList = new List<SelectListItem>();
foreach (var job in jobTitles)
{
var item = new SelectListItem();
item.Value = job.PropertyName; //the property you want to display i.e. Title
item.Text = job.PropertyName;
jobList.Add(item);
}
ViewBag.Title = jobList;
然后在视图中
@Html.DropDownListFor(model => model.Title, new SelectList(ViewBag.Titles,"Value","Text", Model.Title))
答案 1 :(得分:1)
我知道我在这方面迟到了,但我遇到了类似的问题,并且认为我会添加我发现的内容。
我还没弄明白为什么 - 我还在研究(这就是我在这里的结果) - 但我认为这与你使用 Title <这个词有关/ em>的
我有完全相同的情况,一旦我将模型更改为 CustomerTitle 而不是标题,事情按预期工作。
最初的想法是模型绑定器在DOM中的其他位置找到 Title 并且被绊倒。完全猜测。如果我有更多时间,我会继续挖掘原因