从SelectItemList中获取选定的值

时间:2016-11-19 15:43:58

标签: c# asp.net-mvc

我试图将SelectListItem用于MVC项目,按照我的预期填充下拉列表。但是当我将选择值传递给使用此model.CodeDropDown.ToString()接受字符串的函数时,我得到的System.Collections.Generic.List 1[System.Web.Mvc.SelectListItem]不是字符串。

如何将所选值作为字符串?

我有一个ViewModel类看起来像这样:

public class HomeViewModel
{
    [Required]
    [DisplayName("Code")]
    public IEnumerable<SelectListItem> CodeDropDown { get; set; }
    public string SelectedValue { get; set; }
}

我使用此Controller

填写下拉列表
public ActionResult Index()
{
    var model = new HomeViewModel();
    using (var dbCon = new SomeDBContext())
    {
       model.CodeDropDown = dbCon.CodeID.ToList().Select(x => new SelectListItem
       {
          Value = x.Name.ToString(), Text = x.CodeDropDown.ToString()
            }).DistinctBy(c => c.Value);
       }
        return View(model);
    }
}

我尝试使用SelectListItem这样的值,

public ActionResult Index(HomeViewModel model)
    {
        var results = mainDbContext.GetSomeResult(model.CodeDropDown.ToString(), model.Prop2, model.Prop3);         
      return View(results);
    }

查看如下:

@Html.DropDownListFor(model => model.SelectedValue, Model.CodeDropDown, "--")

2 个答案:

答案 0 :(得分:1)

在HomeViewModel中再添加一个属性(SelectedThingId或更有意义的东西),以便从下拉列表中保存所选内容的值。

在您的视图中(您尚未发布视图代码)具有以下内容:

@Html.DropDownListFor(x=>x.SelectedThingId, Model.CodeDropDown)

然后在您的控制器中,您可以使用以下方式获取此值:

model.SelectedThingId; // model is passed into your controller has you have it. 

答案 1 :(得分:1)

在模型中添加2个属性

public string CodedropdownID{ get; set; } //to store the selected dropdown value Id
public string CodedropdownText{ get; set; } //to store the selected dropdown value text

按如下所示更改视图,并将onchange事件添加到下拉列表中:

@Html.DropDownListFor(m=> m.CodedropdownID, m.CodeDropDown, "--")
@Html.Hiddenfor(m=>m.CodedropdownText)

添加以下脚本:

<script type="text/javascript">

$("#CodedropdownID").on("change", function {
   $("#CodedropdownText").val($(this).text());
 });

</script>

更改控制器方法

 public ActionResult Index(HomeViewModel model)
    {
        var results = mainDbContext.GetSomeResult(model.CodedropdownText.ToString(), model.Prop2, model.Prop3);         
      return View(results);
    }