1

IEnumerable リストを生成するための for ループがあります。

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に基づいてその値を検索する必要があります。

その方法は、アプリによって異なります。1 つのオプションは、再度 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. もう 1 つの方法は、モデルに別の文字列フィールドを追加することです (例:
    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 に答える