【问题标题】:DropdownListfor not selecting the value from the dropdownDropdownList 用于不从下拉列表中选择值
【发布时间】:2019-03-05 05:10:15
【问题描述】:

我已经查看了所有关于此的已发布查询,但没有找到解决方案,这是控制器 不知道哪里出错了`

string path = LibConf.dllAppSetting("graphcsvfiles");
System.IO.DirectoryInfo d = new DirectoryInfo(path);
FileInfo[] files  = d.GetFiles("*.csv");//Directory.GetFiles(path).Where(s => s.EndsWith("*.csv"));
IEnumerable<SelectListItem> selectLists = files.Select(x => new SelectListItem { Text = x.Name, Value = x.FullName });

MyTestModel m = new MyTestModel;
m.filenames = selectLists;
return View(m);

这是模型

[DisplayName("File")]
public string File { get; set; }
public IEnumerable<SelectListItem> filenames {get; set;}

查看:

 <td>
    @Html.LabelFor(m => m.File)
    @Html.DropDownListFor(m => m.File, new SelectList(Model.filenames, "Text", "Value"), "-select type-", new { @class = "css-class", @style = "margin-right:4px; width:150px;height:28px" })
  </td>

【问题讨论】:

  • m.File 似乎没有被填充,那么为什么会在下拉列表中选择任何内容?
  • @ErikPhilips .. Appologies,我是 mvc 的新手。请帮忙做点什么

标签: c# asp.net-mvc


【解决方案1】:

这段代码没有任何问题。 确保您将模型导入到视图中

 @model WebApplication.Models.MyTestModel 

<td>
    @Html.LabelFor(m => m.File)
    @Html.DropDownListFor(m => m.File, new SelectList(Model.filenames, "Text", "Value"), "-select type-", new { @class = "css-class", @style = "margin-right:4px; width:150px;height:28px" })
  </td>

【讨论】:

  • 模型出现在我的视图中,我可以看到下拉列表但问题无法从下拉列表中选择
  • 当你点击一个项目时会发生什么?它总是显示“-select type-”吗?
  • --选择类型--作为选项出现,当我点击它时,什么也没有发生
  • --选择类型没有出现在下拉列表的文本框中,而是像其他选项一样显示。我是否缺少 m.File 的内容
  • 默认情况下“--select type--”应该是像imgur.com/CUIGobG这样的选中项。当您展开列表时,它应该像这样 imgur.com/rTGBeQb 显示。 --select type-- 将显示为列表中的一个项目。
【解决方案2】:

在所有解决方法之后,我观察到@Html.DropDownListFor 在“td”内无法正常工作。 保存在“td”之外的相同代码可以正常工作。

【讨论】:

    【解决方案3】:

    下拉列表没有选择值的主要原因是因为你从来没有告诉它应该选择什么值:

    MyTestModel m = new MyTestModel();
    m.FileNames = selectLists;
    

    您从未为m.File 分配值,在这种情况下,它是下拉列表的选定值。因此,下拉菜单只会默认为您的选项标签。

    你需要做的:

    MyTestModel vm = new MyTestModel
    {
        File = "KEY_VALUE_THAT_IS_ON_THE_LIST",
        FileNames = selectLists
    };
    
    return View(vm);
    

    另外我想纠正你的 2 个编码风格/问题,因为你对 MVC 很陌生:

    1。 @Html.DropDownListFor&lt;td&gt; 内部不起作用??

    不。下拉/选择是表格单元格内的有效元素。请看下面的截图。

    2。您的视图模型已经包含一个选择列表

    您正在为视图模型构建一个IEnumerable&lt;SelectListItem&gt;,并将它传递到视图上的SelectList 以呈现为下拉列表。 IEnumerable&lt;SelectListItem&gt; SelectList!您无需再构建一个并将SelectListItem 列表再次传递给它。

    相反,您可以这样做:

    @Html.LabelFor(x => x.File)
    @Html.DropDownListFor(x => x.File, Model.FileNames, "- select type -" ... })
    

    【讨论】:

    • 我这样做了,但仍然无法在 html 表中工作
    • @Lax:那么可能是其他原因导致了您的问题。它对我有用(通过截图证明)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多