如何从@ Html.DropDownListFor获取所选项目

时间:2014-03-19 07:51:13

标签: c# asp.net-mvc

我搜索了很多页面,但找不到任何真正帮助我的东西。我有一个视图模型加载,然后我需要从选定的“DocumentTypeList”获取ID,以便我可以将它分配给我的Document对象上的DocumentTypeId。

我必须将“DocumentTypeList”放在我的Document类中,还是将其保留在视图模型中的位置?

这是我的视图模型。

 #region Properties
    public Document Document { get; set; }

    public List<CultureInfo> AvaialableLocales { get; set; }

    public IEnumerable<DocumentType> DocumentTypeList {get; set;}
    #endregion

    #region Constructor
    public FileUploadViewModel()
    {
        Document = new Document();

        AvaialableLocales = GTSSupportedLocales.Locales;
    }
    #endregion

这是我的视图,页面上有viewmodel

@Html.DropDownListFor(x => x.DocumentTypeList, new SelectList(Model.DocumentTypeList, "Code", "Description"), "-- Please Select --")

这是我调用的动作

[HttpPost]
    public ActionResult SaveFile(FileUploadViewModel Doc)
    {
        if (Request.Files.Count > 0)
        {
            var file = Request.Files[0];

            if (file != null && file.ContentLength > 0)
            {
                using (Stream inputStream = file.InputStream)
                {
                    MemoryStream memoryStream = inputStream as MemoryStream;
                    if (memoryStream == null)
                    {
                        memoryStream = new MemoryStream();
                        inputStream.CopyTo(memoryStream);
                    }
                    Doc.Document.UploadedFile = memoryStream.ToArray();
                }
            }
        }         

        return Content("File is being uploaded");
    }

更新

我找到了一个有效的解决方案。感谢您的所有输入。

 @Html.DropDownListFor(n => n.Document.DocumentTypeId, Model.DocumentTypeList.Select(option => new SelectListItem()
                {
                    Text = option.Description,
                    Value = option.ID.ToString(),
                    Selected = (!Model.Document.DocumentTypeId.IsNull() && (Model.Document.DocumentTypeId == option.ID))
                }))

2 个答案:

答案 0 :(得分:0)

在ViewModel中创建另一个获取selectedValue的属性。

public DocumentType SelectedDocumentType {get; set;}

像这样更改你的DropDownList

Html.DropDownListFor(n => n.SelectedDocumentType, new SelectList(DocumentTypeList, "Code", "Description"))

可以使用SelectedDocumentType属性访问SelectedValue。

答案 1 :(得分:0)

当@DarinDimitrov回答here时,在ASP.NET MVC中,当您使用lambda表达式作为第一个参数时,助手DropDownListFor无法确定所选项目。它表示具有集合的复杂属性。

这是一个限制,但你应该能够使用帮助器,在ViewModel中设置一个简单的属性,就像在辅助器中作为第一个参数传递的lambda表达式一样,这样:

public DocumentType MySelectedDocumentType {get; set;}

然后你的帮助声明将是这样的:

@Html.DropDownListFor(x => x.MySelectedDocumentType, new SelectList(Model.DocumentTypeList, "Code", "Description"), "-- Please Select --")
  

我必须把&#34; DocumentTypeList&#34;在我的Document类或保留它   它在视图模型中的位置?

出于上述原因,您不应在助手中使用通用集合来获取所选项目。