1

我有一个 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)

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

我能做些什么?

4

3 回答 3

0

如果你想有一个自定义的选择值,那么你需要在你的下拉列表中添加一些代码

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

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

public SelectList(IEnumerable items, string dataValueField, string dataTextField);
于 2012-11-15T15:53:30.310 回答
0

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

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

var data = loadData();

var text = data.Where(x => x.Value == value).Single().Text;
于 2012-11-07T21:07:11.163 回答
0
  1. 正确的方法是提交后重新查询数据库并按项目值搜索项目文本。
  2. 您可以缓存load_from_database结果值(在 Session 或 HttpCache 中)并从那里搜索项目文本。
  3. 另一种方法是将模型附加到另一个字符串字段(例如:
    public string selectedUserAppText { get; set; } 将其传递给您的视图:

@Html.HiddenFor(m => 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/

于 2012-11-07T20:30:09.790 回答