【问题标题】:ASP.NET MVC @Html.DropdownListFor wrong selected valueASP.NET MVC @Html.DropdownListFor 错误的选择值
【发布时间】:2014-11-21 15:08:45
【问题描述】:

我知道有很多关于此的问题(thisthisthis)是我阅读的一些问题,但我没有找到任何帮助:

在我看来我有

@Html.DropDownListFor(m => m.AktPriority, CustomHTMLHeper.GetPriorityDropDown(),new { @class = "form-control" })

在我的助手中

    public static SelectList GetPriorityDropDown()
    {

        List<SelectListItem> result = new List<SelectListItem>();
        SelectListItem low = new SelectListItem();
        low.Value = "0";
        low.Text = "Niedrig";
        SelectListItem middle = new SelectListItem();
        middle.Value = "1";
        middle.Text = "Mittel";
        SelectListItem high = new SelectListItem();
        high.Value = "2";
        high.Text = "Hoch";
        return new SelectList(new SelectListItem[] { middle, high, low }, "Value", "Text", "1");

    }

我希望选择值为 1 的项目,但会生成以下 HTML:

<select name="AktPriority" id="AktPriority" class="form-control">
  <option value="1">Mittel</option>
   <option value="2">Hoch</option>
    <option value="0" selected="selected">Niedrig</option>
   </select>

我还尝试在帮助程序中将 Selected 属性设置为 true。这也不起作用。

【问题讨论】:

标签: html asp.net-mvc asp.net-mvc-4 razor html.dropdownlistfor


【解决方案1】:

由于您已尝试将 SelectListItemSelected 属性设置为 true 在创建 SelectList 时实际指定所选值,因此只有一种情况我仍然可以看到这个失败。你没有明确地说,但我的假设是这只是初始页面加载的问题,比如创建视图,你没有发布的数据,也没有现有的数据。

在那种情况下,您的ApkPriority 属性(我假设它是int,因为您也没有指定)将具有默认值0。然后,Razor 会自动选择与此默认值匹配的项目。如果您希望默认选择值为1 的选项,您实际上应该将其设为属性的默认值:

private int? apkPriority;
public int ApkPriority
{
    get { return apkPriority ?? 1; }
    set { apkPriority = value; }
}

【讨论】:

    【解决方案2】:

    您没有发布您的操作方法,但如果您使用DropDownListFor,则需要在模型中设置“选定”值:

    model.AktPriority = "1";
    
    return View(model);
    

    【讨论】:

    • 刚刚发布了同样的东西:D
    【解决方案3】:

    在复制更多代码以在 OP 中提供更多信息时,我自己发现了错误。

    在我的控制器 get-Method 中,它返回我拥有的空表单:

    [HTTPGet]
     ActionResult Create () 
      {
         return View(new ActivityModel())
      }
    

    在我的模型中,所选值的值保存为 int。因此,当我创建如上所示的新空模型时,int 的默认值会覆盖默认值 1。

    解决方法很简单

    [HTTPGet]
     ActionResult Create () 
      {
         ActivityModel = new ActivityModel();
         model.AktPriority = 1;
         return View(model)
      }
    

    【讨论】:

      【解决方案4】:

      在您的助手中添加以下行

      middle.Selected = true;
      

      我相信默认情况下,如果您不选择任何内容,则控件会选择列表中的第一个值。

      对不起,我没看到那条线。尝试填充结果,然后返回 SelectList 做

      return new SelectList((IEnumerable<SelectListItem>)result, "Value", "Text", "1");
      

      【讨论】:

        【解决方案5】:

        这是另一种可能性(在到期模型和 SelectedValue 解决方案之后)。

        ViewBag.AktPriority = 0;
        
        @Html.DropDownListFor(m => m.AktPriority, CustomHTMLHeper.GetPriorityDropDown(),new { @class = "form-control" })
        

        由于某些未知原因,我发现如果变量名称相同,MVC 会更喜欢使用 ViewBag 值而不是模型。解决方案是重命名一个。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-11-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多