【问题标题】:Assign a value to select list (in a table) from a DB分配一个值以从数据库中选择列表(在表中)
【发布时间】:2014-10-28 19:06:27
【问题描述】:

我在将选定值分配给数据库中的选择列表(即在表中)时遇到问题。

该值默认为第一个选项,即使将值传递给它并且它肯定会从我的控制器传递到视图。

我还尝试了一个不同的选择列表,它可以在我的表单上正确传递值,但该选择列表也不起作用。所以我很确定它与桌子有关

这是传值的截图。

选择列表

public IEnumerable<SelectListItem> ListViewStatusOptions
{
    get
    {
        return new[]
        {
            new SelectListItem { Value = "Scheduled", Text = "Scheduled" },
            new SelectListItem { Value = "OFR-Out for Revision", Text = "OFR-Out for Revision" },
            new SelectListItem { Value = "Tool Work Required", Text = "Tool Work Required" },
            new SelectListItem { Value = "Delayed", Text = "Delayed" },
            new SelectListItem { Value = "In Press", Text = "In Press" },
        };
    }
}

选择表格中的列表

@foreach (var item in Model) {
    <td>
       @Html.DropDownListFor(modelItem => item.ListViewStatus, item.ListViewStatusOptions, "Select", new { @id = @Html.ValueFor(modelItem => item.Id )})
    </td>
}

【问题讨论】:

    标签: asp.net-mvc razor model-view-controller


    【解决方案1】:

    您需要使用一个 SelectList 对象新建一个 SelectListItems 数组。

    将此属性添加到您的方法中

    public IEnumerable<SelectListItem> StatusOptions
    {
        get { return new SelectList(ListViewStatusOptions, "Value", "Name"); }
    }
    

    “值”是包含每个项目 id 的属性的名称。您可以拥有任何类型的对象的列表,而不仅仅是 SelectListItems。这就是为什么似乎没有必要传递“值”,类似地,“名称”是包含向用户显示的内容的属性。

    然后将您的剃须刀代码更改为

    @foreach (var item in Model) {
        <td>
           @Html.DropDownListFor(modelItem => item.ListViewStatus, item.StatusOptions, "Select", new { @id = @Html.ValueFor(modelItem => item.Id )})
        </td>
    }
    

    【讨论】:

    • 感谢您的回复和解释。我没有让这段代码工作(我猜我做错了什么)但它肯定让我走上了正确的道路,我现在让它工作了,我将在下面发布代码。在您的示例中,它看起来好像没有分配选定的值
    【解决方案2】:

    值列表的正确绑定是:

    for (int i = 0; i < Model.Count; i++)
    {
        @Html.DropDownListFor(modelItem => modelItem[i].ListViewStatus, new SelectList(Model[i].ListViewStatusOptions, "Value", "Text", Model[i].ListViewStatus))
    }
    

    您必须使用 for 循环而不是 for-each,因为如果使用 foreach,mvc 将不会生成正确的输入名称,并且操作方法不会解析发布的数据

    【讨论】:

      【解决方案3】:

      我更新的 Razor 代码。 正如@ScottMacMaster 解释的那样,

      您需要使用一个 SelectList 对象新建一个 SelectListItems 数组。 “值”是包含每个项目 id 的属性的名称。 您可以拥有任何类型的对象的列表,而不仅仅是 SelectListItems。 这就是为什么似乎没有必要传递“值”,类似地,“名称” 是包含要向用户显示的内容的属性。

      我收到Name 的错误,因此我将其更改为Text

      然后我将item.ListViewStatus 分配为对象选择值

      @Html.DropDownListFor(modelItem => item.ListViewStatus, new SelectList(item.ListViewStatusOptions, "Value", "Text",item.ListViewStatus), "Select", new { @id = @Html.ValueFor(modelItem => item.Id )})

      【讨论】:

      • 如果你在你的模型中设置属性ListViewStatus的值,那么这就是将被选中的选项(所以如果你在你的控制器中设置model.ListViewStatus="Delayed",那么第四项将被选中。您不需要上面SelectList() 中的第4 个参数,实际上您不需要创建SelectList,因为它已经IEnumerable&lt;SelectListItem&gt; (您只做了两次!)。阅读MajoB 答案-您需要一个for 循环,否则这不会回发。为什么要创建多个 IEnumerable&lt;SelectListItem&gt; 实例(每个项目一个)?
      猜你喜欢
      • 2014-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-25
      • 1970-01-01
      • 2021-12-30
      • 2011-09-17
      • 2017-10-21
      相关资源
      最近更新 更多