2014-09-26 76 views
0

我知道有吨关于这个问题(thisthisthis)是一些我读了问题,但我并没有发现任何帮助:ASP.NET MVC @ Html.DropdownListFor错误选择的值

在我看来,我有

@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的项目进行选择,但FOLL由于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。这也没有用。

+0

你可以添加你的模型类代码和控制器代码吗? – ekad 2014-09-26 14:53:48

+0

我认为你的问题是类似于这里回答的是什么:http://stackoverflow.com/a/20008816/244353 – Mrchief 2014-09-26 14:58:16

回答

1

你不发表您的操作方法,但如果你使用DropDownListFor你需要设置模型中的“选择”值:

model.AktPriority = "1"; 

return View(model); 
+1

刚刚发布相同的东西:D – 2014-09-26 15:14:34

0

在你的助手添加以下行

middle.Selected = true; 

我相信,在默认情况下,如果你不进行任何选择控制选择列表中的第一个值。

对不起,我没有看到那条线。尝试填充结果,然后在你的SelectList的回归做

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

我写了我的OP,这并没有工作 – 2014-09-26 15:07:32

1

虽然在OP中复制一些更多的代码以提供更多信息,但我自己却发现了这个错误。

在我的控制器获取方法,它返回一个空的形式我有:

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

在我的模型所选择的值的值保存为一个int。所以,当我创建一个新的空模型如上图所示为int的默认值是压倒一切的1

该解决方案的默认值是简单

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

既然你曾经尝试都设置SelectListItemSelected属性为真实际上在创建SelectList时指定了选定的值,只有一个场景我仍然可以看到这个失败。你没有明确地说,但我的假设是,这只是一个初始页面加载类似于创建视图的问题,在这里你没有发布的数据,也没有现有的数据。

在这种情况下,我认为您的ApkPriority属性是int,因为您尚未指定任何一个,其默认值为0。然后Razor会自动选择与此默认值相匹配的项目。如果你想用默认选择值1的选项,你实际上应该让该属性的默认值:

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

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

ViewBag.AktPriority = 0; 

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

对于一些未知的原因,我发现MVC会更喜欢使用的机型ViewBag值,而如果变量名是一样的。解决方案是重命名一个。