2016-09-18 43 views
2

我有一个MVC 5站点...ASP.NET MVC 5站点 - 编辑视图不在DropDownListFor中选择项目

故事可以选择性地与一个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(而不是 DropDownList)。
  • 我想添加一个“No Associated Place”,如果PlaceId为null(并且应该将null传回模型),那么将会选择 。
  • 我想添加一个css class =“form-control”到DropDownListFor。

控制器(获取)

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 }的最终参数 - 导致此选择?

我在网上找不到任何关于这个特定问题的东西 - 并且几乎没有发现如何以我需要的方式将下拉列表绑定到强类型编辑视图。

如何让它选择正确的项目? (也对我如何做这些改进也表示赞赏)。

谢谢。

回答

1

我想你需要更改下面的代码

// Put select list of all places in ViewBag 
    ViewBag.PlaceId = new SelectList(PlaceRepo.SelectAll(), "Id", 
          "PlaceName", new { Id = story.PlaceId }); 

成为SelectedList的

// Put select list of all places in ViewBag 
    ViewBag.PlaceId = new SelectList(PlaceRepo.SelectAll(), "Id", 
          "PlaceName", story.PlaceId); 

定义从msdn

的SelectList(IEnumerable的,字符串,字符串,对象):通过使用指定的参数初始化SelectList类的新实例 编辑 列表的项目,数据值字段,数据文本字段和选定值。

这里工作demo

更新demo

希望这将帮助你

+0

谢谢 - 已试过了,仍然无法正常工作。 – niico

+0

你也有东西在视图 – Monah

+0

我想知道,如果你写的dropdownlistfor的方式,占位符正在与你一起工作? – Monah