【问题标题】:HtmlDropDownListFor in Edit View how to retain current value in the Select List编辑视图中的 HtmlDropDownListFor 如何在选择列表中保留当前值
【发布时间】:2016-08-22 15:39:10
【问题描述】:

在我的编辑视图中,我有一个包含多个输入框 (EditorFor) 的表单,每个输入都有一个“运算符”下拉列表,其值类似于 =, <>, IN, NOT IN。每次我进入编辑视图时,选定的 DropDown 值都会被“重置”。

传入的 ViewModel 确实包含正确的值,但是我无法让选择列表默认为该选定值。

下拉

 @Html.DropDownListFor(model => model.JcrOrgBudgetGroupOp, new SelectList(OperatorsHelper.StrOperators,selectedValue:Model.JcrOrgBudgetGroupOp)

StrOperators

   public static class OperatorsHelper
   {
      public static IEnumerable<string> StrOperators = new List<string>
      {
        "=",
        "<>",
        "IN",
        "NOT IN"
    };
}

【问题讨论】:

  • 您的代码看起来不错。你确定Model.JcrOrgBudgetGroupOp 有这些字符串值之一吗?
  • 在控制器中调试 Edit ActionMethod,我看到 ViewModel 具有 JcrOrgBudgetGroupOp 的值
  • 那是什么价值观?那些字符串值之一?然后它应该工作。我刚刚复制并粘贴到本地项目中,效果很好。
  • 视图渲染时值为NOT IN=
  • 那个选项也对我有用。检查这些词之前/之后是否有空格

标签: c# asp.net-mvc razor


【解决方案1】:

首先,在视图中创建SelectList 有时可能会出现问题。 DropDownListFor 不需要SelectList:只需IEnumerable&lt;SelectListItem&gt;。推荐的方法总是这样做:

public static class OperatorsHelper
{
    public static IEnumerable<string> StrOperators = new List<string>
    {
        return new[] { "=", "<>", "IN", "NOT IN" }.Select(op => new SelectListItem
        {
            Text = op,
            Value = op
        });
    };
}

然后:

@Html.DropDownListFor(m => m.JcrOrgBudgeGroupOp, OperatorsHelper.StrOperators)

Razor 然后会自动创建SelectList选择适当的项目。

要注意的另一件事是,“选定”值实际上是 ModelState 中的值,不一定是 Model 中的值。重要的是,ModelState 由来自RequestViewBag/ViewData 的值组成,首先是Model 作为最后的手段。换句话说,如果您要发布名为jcrOrgBudgetGroupOp 的字段,从jcrOrgBudgetGroupOp 的URL 传递一个动作参数的值,或者设置ViewBag.JcrOrgBudgetGroupOp(在任何一种情况下都无关紧要),该值将始终成为被选中的对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多