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.HiddenForHelper 方法在表单中为该属性创建一个隐藏变量

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

3)使用小javascript覆盖提交!IE; 当用户提交表单时,从下拉列表中获取选定的文本并将该值设置为隐藏字段的值。

$(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 回答