.Net MVC 4 Dropdownlistfor SelectedItem(不只是选中的值,而是选中的文本)

时间:2012-11-07 11:14:44

标签: c# asp.net asp.net-mvc razor html.dropdownlistfor

我有一个for循环来生成IEnumerable列表:

public static IEnumerable<SelectListItem> loadData()
{
    DataTable dt = load_from_database;
    List<SelectListItem> list = new List<SelectListItem>();
    foreach (DataRow dr in dt.Rows)
    {
        SelectListItem listItem = new SelectListItem();
        listItem.Text = dr["name"].ToString();
        listItem.Value = dr["id"].ToString();
        list.Add(listItem);
    }
    return list;
}

我有以下型号:

public class Models
{
    public string selectedUserApp { get; set; }
    public IEnumerable<SelectListItem> userApps  { get; set;  }
}

控制器:

public ActionResult Index()
{
    var model = new UserApplicationModels();
    userAppsList = loadData();
    model.userApps = userAppsList;
    model.selectedUserApp = model.userApps.First().Value;

    return View(model);
}

然后是观点:

@model Models

@Html.DropDownListFor(x=>x.selectedUserApp , Model.userApps)

我得到的是所选项目的价值,但我需要获取所选项目的文本。

我该怎么办?

3 个答案:

答案 0 :(得分:0)

  1. 正确的方法是在提交后重新查询数据库,并按项目值搜索项目文本。
  2. 您可以缓存 load_from_database 结果值(在Session或HttpCache中)并从那里搜索项目文本。
  3. 另一种方法是使用另一个字符串字段附加模型(例如:
    public string selectedUserAppText {get;组; } 将其传递给您的视图:
  4. @ Html.HiddenFor(m =&gt; m.selectedUserAppText)

    使用jQuery代码设置其值,如:

    $("#your_dropdown_id").change(function(e) {
      var selectedText = $("#your_dropdown_id").children("option:selected").text();
      $('#your_hidden_for_id').val(selectedText);
    });
    

    提交此表单后,您的selectedUserAppText字段将获得所选项目文本 请在以下位置查看此操作: http://jsfiddle.net/m4zuH/1/

答案 1 :(得分:0)

MVC必须使用标准HTTP发布机制,并且此机制不包含下拉列表的文本。它只包含值。因此,您必须..在服务器上,根据id查找该值。

你如何做到这一点,取决于你的应用程序。一种选择是再次调用loadData(),然后执行简单的linq查询以返回文本。

var data = loadData();

var text = data.Where(x => x.Value == value).Single().Text;

答案 2 :(得分:0)

如果您想拥有自定义选定值,那么您需要在下拉列表中添加更多代码

@Html.DropDownListFor(m => m.selectedUserApp , new SelectList(Model.userApps, "Name", "Name"))

SelectList就是您所需要的,因为您可以设置对象的哪些属性是值或将是文本:

public SelectList(IEnumerable items, string dataValueField, string dataTextField);