2016-09-18 44 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