2010-10-18 77 views
1

我有以下2類:DropDownListFor人口問題

public class SomeClass 
{ 
    public int SomeClassID { get; set; } 
    ... 
} 

public class AnotherClass 
{ 
    public int AnotherClassID { get; set; } 
    public int AnotherClassText { get; set; } 
} 

我有一個包含以下內容的視圖模型:

public class MyViewModel 
{ 
    public SomeClass { get; set; } 
    public List<AnotherClass> { get; set; } 
} 

MyViewModel類型的強類型的視圖。我想用DropDownListFor()爲了有AnotherClass(價值= AnotherClassID,文本= AnotherClassText)列表,並有任何用戶選擇被分配到SomeClass.SomeClassID

我怎樣才能做到這一點?

+0

你也可以使用我的AjaxDropdown幫助器,所以你只需發送到視圖的int SomeClassId並取回新的,下拉將通過Ajax在視圖中填充(http://真棒。 codeplex.com)我有一些演示項目,在那裏我展示瞭如何做到這一點 – Omu 2010-10-19 07:31:00

回答

2

型號:

public class SomeClass 
{ 
    public int SomeClassID { get; set; } 
} 

public class AnotherClass 
{ 
    public int AnotherClassID { get; set; } 
    public int AnotherClassText { get; set; } 
} 

public class MyViewModel 
{ 
    public SomeClass SomeClass { get; set; } 
    public List<AnotherClass> AnotherClasses { get; set; } 
} 

控制器:

[HandleError] 
public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     var model = new MyViewModel 
     { 
      AnotherClasses = new[] 
      { 
       new AnotherClass { AnotherClassID = 1, AnotherClassText = 1 }, 
       new AnotherClass { AnotherClassID = 2, AnotherClassText = 2 }, 
       new AnotherClass { AnotherClassID = 3, AnotherClassText = 3 }, 
      }.ToList() 
     }; 
     return View(model); 
    } 

    [HttpPost] 
    public ActionResult Index(MyViewModel model) 
    { 
     // TODO: 
     return View(model); 
    } 
} 

查看:

<%= Html.DropDownListFor(x => x.SomeClass.SomeClassID, 
    new SelectList(Model.AnotherClasses, "AnotherClassID", "AnotherClassText"))%> 
+0

這是正確的,但是你是否在你的真實項目中這樣做?發送實體到視圖,並在視圖內使用selectlist(,,) – Omu 2010-10-19 07:36:31

+0

是的,這就是我在真實項目中如何做的,除了我使用存儲庫來獲取數據而不是硬編碼,但這很明顯。我在控制器中填充視圖模型並將其傳遞給視圖。在視圖中,我使用SelectList創建下拉列表,並從視圖模型中選擇要綁定的屬性。也可以直接使用SelectList作爲視圖模型的一個屬性,但是我個人更喜歡在視圖中保留這個邏輯。使用AutoMapper在域模型和視圖模型之間進行映射以避免SelectList時,它似乎更容易,但它也可以像這樣工作。 – 2010-10-19 07:50:34

0

您可以將屬性添加到您的視圖模型是獲取和設置SomeClassID,然後作出這樣的下拉:

Html.DropDownListFor(m => m.SomeClassId, 
    m.OtherClasses.Select(o => new SelectListItem { Text = o.Text, value = o.ID}) 
); 
+0

這似乎並不奏效。由於SelectListItem.Value需要int,因此投射問題。 – 2010-10-19 02:01:10

+0

@Brian:那你的身份證是什麼?你爲什麼不能施展它? – SLaks 2010-10-19 03:12:39

+0

m => m.SomeClassId是一個int,你是否在提示我ToString()? – 2010-10-19 13:24:51