编辑中的HtmlDropDownListFor查看如何在选择列表

时间:2016-08-22 15:39:11

标签: c# asp.net-mvc razor

在我的编辑视图中,我有一个包含多个输入框(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"
    };
}

1 个答案:

答案 0 :(得分:0)

首先,在视图中创建SelectList有时可能会出现问题。 DropDownListFor不需要SelectList:仅IEnumerable<SelectListItem>。推荐的方法总是做一些事情:

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上的值。重要的是,ModelStateRequestViewBag / ViewData的值组成,首先是Model,最后是jcrOrgBudgetGroupOp。换句话说,如果您要发布名为jcrOrgBudgetGroupOp的字段,请从ViewBag.JcrOrgBudgetGroupOp的网址传递操作参数的值,或设置Typeface(在任何一种情况下,套管都无关紧要) ),该值将始终是所选择的。