如何在http post中找到控制器中下拉所选项目文本

时间:2014-07-30 02:25:35

标签: asp.net-mvc asp.net-mvc-3 razor html.dropdownlistfor

我绑定了MVC 3应用程序中的下拉列表。当我正在进行POST时,模型包含选中的属性下拉值" SelectedWidgetId" ( Id ),这很好。

但我也希望在另一个属性" SelectedWidgetText"中看到所选的Item TEXT。 (名称)?

搜索后,我找到一种方法来查找下拉列表中的选定项目文字,但它不是直接?寻找其他方式?推荐!

model.SelectedWidgetText = m.WidgetList.Where(e => e.Value == m.SelectedWidgetId.ToString()).FirstOrDefault().Text;

这是所有代码,

模型

public class Widget
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class WidgetModel
{
    private Widget[] Widgets
    {
        get
        {
            return new Widget[] { 
            new Widget { Id=1, Name="Item 1" },
            new Widget { Id=2, Name="Item 2" },
            new Widget { Id=3, Name="Item 3" }
        };
        }
    }
    public SelectList WidgetList
    {
        get
        {
            return new SelectList(Widgets.ToList(), "Id", "Name", SelectedWidgetId);
        }
    }
    public int SelectedWidgetId { get; set; }
    public string SelectedWidgetText { get; set; }
}

控制器

public ActionResult Index()
    {
        var model = new WidgetModel();
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(WidgetModel model)
    {
        model.SelectedWidgetText = model.WidgetList.Where(e => e.Value == model.SelectedWidgetId.ToString()).FirstOrDefault().Text;
        return View(model);
    }

查看

@using (Html.BeginForm())
{
@Html.DropDownListFor(m => m.SelectedWidgetId, Model.WidgetList, "Select...");      
<input type='submit' />                                                                                    
}

1 个答案:

答案 0 :(得分:1)

为了满足您的要求,您必须这样做:

我正在使用模型类的public string SelectedWidgetText { get; set; }属性。

使用一些jquery:

<script>
$("#SelectedWidgetId").on("change", function {
   $("#SelectedWidgetText").val($(this).text());
});
</script>

[HttpPost]
public ActionResult Index(WidgetModel model,string SelectedWidgetText) 
{
  // do something with SelectedWidgetText value
}