【发布时间】:2016-09-18 19:32:31
【问题描述】:
我有一个 MVC 5 站点...
可以选择将故事与 PlaceId 关联。空白 placeId 也是有效的。一个地方可以与多个故事相关联。
模型
public class Place
{
public Guid Id { get; set; }
public string PlaceName { get; set; }
}
public class Story
{
public Guid Id { get; set; }
public Guid? PlaceId { get; set; }
public string StoryName { get; set; }
}
我有几个要求。
- 编辑故事时,我想要一个包含所有地点的下拉列表 被显示 - 与相关的地方(如果有的话) - 被选中。
- 我想使用强类型的 DropDownListFOR(而不是 下拉列表)。
- 我想添加一个“No Associated Place”,它将是 如果 PlaceId 为 null(并且应该将 null 传递回模型),则选择此选项。
- 我想在 DropDownListFor 中添加一个 css class= "form-control"。
控制器(获取)
public ActionResult Edit(Guid Id)
{
// Get Story
var story = StoryRepo.SelectArticle(Id);
// Put select list of all places in ViewBag
ViewBag.PlaceId = new SelectList(PlaceRepo.SelectAll(), "Id", "PlaceName", new { Id = story.PlaceId });
// Return view
return View(story);
}
可见
@Html.DropDownListFor(x => x.PlaceId, (IEnumerable<SelectListItem>)ViewBag.PlaceId, "No Associated Place",
new { @class = "form-control" })
这可以很好地填充下拉列表,并且当您选择一个项目时,PlaceId 位于绑定到控制器的模型中。但是 - 在视图加载时它不会选择现有的 PlaceId。
ViewBag.PlaceId 行 new { Id = story.PlaceId } 中的最终参数不应该导致此选择吗?
我在网上找不到关于这个特定问题的任何信息 - 并且几乎找不到关于如何以我需要的方式将下拉列表绑定到强类型编辑视图的信息。
我怎样才能让它选择正确的项目? (也感谢我如何做这件事的任何改进)。
谢谢。
【问题讨论】: