1

我有簡單的測試模式:MVC3 DropDownListFor沒有選擇項目(MVC錯誤?)

public class MyModel 
    { 
     public InnerModel InnerModel { get; set; } 

    } 

    public class InnerModel 
    { 
     public int Value { get; set; } 
    } 

在控制器:

public ActionResult Index() 
{ 
    var model = new MyModel(); 

    model.InnerModel = new InnerModel { Value = 3 }; 

    return View("MyModelView", model); 
} 

MyModelView:

@model MyModel 

@{ 
    var items = new List<SelectListItem>() 
        { 
         new SelectListItem {Text = "one", Value = "1"}, 
         new SelectListItem {Text = "two", Value = "2"}, 
         new SelectListItem {Text = "three", Value = "3"} 
        }; } 


@Html.DropDownListFor(m=>m.InnerModel.Value,items,"no_selected") 

當頁面加載我看到選定的項目: enter image description here

這很好。

但是,如果我添加EditorTemplate InnerModel.cshtml

@model InnerModel 

    @{ 
     var items = new List<SelectListItem>() 
         { 
          new SelectListItem {Text = "one", Value = "1"}, 
          new SelectListItem {Text = "two", Value = "2"}, 
          new SelectListItem {Text = "three", Value = "3"} 
         }; } 


    @Html.DropDownListFor(m=>m.Value,items,"no_selected") 

,並更改MyModelView

@model MyModel 
@Html.EditorFor(m=>m.InnerModel,"InnerModel") 

當頁面加載我看到:enter image description here

爲什麼? MVC的錯誤?

更新: 這個真正的bug。 See

回答

8

創建選擇項列表時,試試這個:

var items = new SelectList(
     new[] 
     { 
      new { Value = "1", Text = "one" }, 
      new { Value = "2", Text = "two" }, 
      new { Value = "3", Text = "three" }, 
     }, 
     "Value", 
     "Text", 
     Model.Value 
    ) 

這裏的解釋爲什麼會發生這種情況:https://stackoverflow.com/a/11045737/486434

+0

是的,我已經嘗試過了。這是有用的,但不是很漂亮。 – DeeRain

+0

如果這是你經常做的事情,然後把它放到一個HTML助手中,那麼它會變得美麗:) –

+0

你鏈接的頁面說「只有當這個lambda表達式是一個簡單的屬性訪問表達式」。我的lambda很簡單。我不明白爲什麼它不起作用。 – DeeRain

1

與@Model InnerModel改變這種

@Html.DropDownListFor(m=>m.InnerModel.Value,items,"no_selected") 

@Html.DropDownListFor(m=>m.Value,items,"no_selected") 
+0

對不起,錯了。在InnerModel編輯器中@ Html.DropDownListFor(m => m.Value,items,「no_selected」)。正確的問題。 – DeeRain