6

私はモデルを持っています:

public class DocumentModel
{
    public int TypeID { get; set; }
    public List<SelectListItem> DocumentTypes { get; set; }
}

私は見解を持っています:

  @Html.DropDownListFor(x => x.TypeID, Model.DocumentTypes, "- please select -")

ドロップダウンにデータを入力します

        var model = new DocumentModel();
        model.DocumentTypes = GetDocumentTypes(); 

private static List<SelectListItem> GetDocumentTypes()
    {

        var items = new List<SelectListItem>
                        {
                            new SelectListItem
                                {Text = @"Text #1", Value = "1"},
                            new SelectListItem
                                {Text = @"Text #2", Value = "2"},
                        };

        return items;

    }

フォームがポストバックされたときにコントローラーアクションがあります:

 [HttpPost] 
    public void UploadDocument(DocumentModel model)
    {
        if (ModelState.IsValid)
        {
            // I want to get the text from the dropdown
        }
    }

ドロップダウンリストからテキストを取得するにはどうすればよいですか?ありがとう

4

4 に答える 4

19

デフォルトのモデルバインディングでは、これを簡単に取得できない場合があります。このような小さな回避策が必要です。

1)モデル/ビューモデルに新しいプロパティを追加して、選択したテキストを保存します

public class DocumentModel
{
    public int TypeID { get; set; }
    public List<SelectListItem> DocumentTypes { get; set; }
    public string SelctedType { set;get;}
}

2)Html.HiddenFor Helperメソッドを使用して、このプロパティのフォームに隠れた変数を作成します

@Html.HiddenFor(x => x.SelctedType)

3)送信をオーバーライドするために小さなJavaScriptを使用してください!すなわち; ユーザーがフォームを送信したら、ドロップダウンから選択したテキストを取得し、その値を[非表示]フィールドの値として設定します。

$(function () {
    $("form").submit(function(){
        var selTypeText= $("#TypeID option:selected").text();
        $("#SelctedType").val(selTypeText);           
    });
});

これで、HTTPPostアクションメソッドで、これがSelectedTypeプロパティで使用できるようになります。

[HttpPost]
public void UploadDocument(DocumentModel model)
{
   if(ModelState.IsValid)
   {
      string thatValue=model.SelectedType;
   }
}
于 2012-06-14T14:27:43.153 に答える
2

あなたがしたいことが選択されたアイテムを取得することであるならば、これは仕事をすることができます:

  var selecteItem = model.DocumentTypes.Where(item=>item.Selected).FirstOrDefault();

乾杯!

于 2012-06-14T14:16:20.510 に答える
1

あなたのモデルには別の文字列があります-

public string Selected{ get; set; }

その後、あなたの見解では:

@Html.DropDownListFor(model => model.Selected, new SelectList(Model.DocumentTypes, "Value", "Text"))
于 2012-06-14T14:31:49.020 に答える
1

SelectListからテキスト値を取得してDropDownList以外の形式で表示する方法を見つけようとしてここでつまずきました(必要なすべてのデータが含まれているため、Edit ViewModelを再利用しています)

var text = selectList.Where(q => q.Selected == true).First().Text;
于 2017-05-30T08:38:20.770 に答える