我如何从@Html.DropDownListFor获得选中的项目

本文关键字:项目 DropDownListFor @Html | 更新日期: 2023-09-27 17:50:50

我已经搜索了相当多的页面等,不能找到任何真正帮助我。我有一个加载的视图模型,然后我需要从选中的"DocumentTypeList"中获取ID,这样我就可以将它分配给我的文档对象上的DocumentTypeId。

我必须把"DocumentTypeList"在我的文档类或保持它是在视图模型?

这是我的视图模型。

 #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

这是我的视图,在页面上有视图模型

@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))
                }))

我如何从@Html.DropDownListFor获得选中的项目

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

public DocumentType SelectedDocumentType {get; set;}

像这样改变下拉列表

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

可以使用SelectedDocumentType属性访问SelectedValue

正如@DarinDimitrov在这里用ASP回答的那样。. NET MVC的助手DropDownListFor是无法确定所选的项目,当你使用lambda表达式作为第一个参数时,它表示复杂的属性与集合。

这是一个限制,但您应该能够使用helper,在ViewModel中设置一个简单的属性,作为lambda表达式作为helper中的第一个参数传递,如下所示:

public DocumentType MySelectedDocumentType {get; set;}

那么你的助手声明将是这样的:

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

我必须把"DocumentTypeList"放在我的Document类上还是保留它它在视图模型中的什么位置?

由于上述原因,您不应该在帮助器中使用泛型集合来获取所选项。