我有一个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; }
}
我有几个要求。
控制器(获取)
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 }
中的最后一个参数 - 导致此选择吗?
我无法在线找到关于此特定问题的任何内容 - 并且几乎找不到如何以我需要的方式将下拉列表绑定到强类型编辑视图。
如何选择正确的项目? (我对此的改进也有所改进。)
感谢。
答案 0 :(得分:1)
我认为您需要更改以下代码
// Put select list of all places in ViewBag
ViewBag.PlaceId = new SelectList(PlaceRepo.SelectAll(), "Id",
"PlaceName", new { Id = story.PlaceId });
成为
// Put select list of all places in ViewBag
ViewBag.PlaceId = new SelectList(PlaceRepo.SelectAll(), "Id",
"PlaceName", story.PlaceId);
中SelectedList的定义
SelectList(IEnumerable,String,String,Object):初始化一个新的 通过使用指定项的SelectList类的实例 列表,数据值字段,数据文本字段和选定的值。
这是一个有效的demo
更新demo
希望这会对你有所帮助