如何从DropDownlistFor中的List <typeobject>获取对象?

时间:2017-12-08 15:32:55

标签: c# asp.net asp.net-mvc

作为c#/ asp.net / mvc的初学者,我找不到如何从View中的Html.DropDownList获取对象。 这是我的ViewModel:

public class MyViewModel {
   public List<Something> ListOfSomething {get;set;} // A list of Somethings
   public Something TheSomethingToGet {get;set;} // The object I want to get
}

“Something”对象例如:

public class Something {
   public int Id {get;set;}
   public string Name {get;set;}
   public int AnotherProperty {get;set;}
}

我填充了我的列表&lt;&gt;在控制器中:

public ActionResult Index () {
   MyViewModel mvm=new MyViewModel();
   mvm.ListOfSomething=(my code to populate the List);
   return View(vm);
}

视图在这里:

@model Project.ViewModels.MyViewModel
@Html.LabelFor(m => m.ListOfSomething)
@Html.DropDownListFor(m => m.ListOfSomething, new SelectList(Model.ListOfSomething, "id", "name"), "-")<br/>

最终,控制器的[HttpPost]索引:

[HttpPost]
public ActionResult Index(MyViewModel mvm) {
    /* Here, how could I get the "Something" object that
       was selected in the dropdownlist and can be identified
       by the "id" property ?
    */

}

我完全错了? 感谢

2 个答案:

答案 0 :(得分:0)

根据我的理解,DropDownListFor适用于基本类型,例如intstring,您需要做的是在ViewModel中发布SelectedId属性并发布然后,在使用该Id的控制器中,您将必须从控制器中的视图模型中的集合中提取所选项目。

您可以尝试:

public class MyViewModel {
   public List<Something> ListOfSomething {get;set;} // A list of Somethings
   public int SelectedItem {get;set;} 
}

现在在您看来,您必须这样做:

@Html.DropDownListFor(m => m.SelectedItem, new SelectList(Model.ListOfSomething, "id", "name"), "-")

然后在你的行动方法中:

[HttpPost]
public ActionResult Index(MyViewModel mvm) {
    // use mvm.SelectedItem id to get the selected complete object from repository
}

希望它会有所帮助。

答案 1 :(得分:0)

好的,我现在明白控制器无法实例化Something对象,我的工作是使用id来查找和使用List的相应记录或项目。感谢