2014-09-26 59 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值,而如果變量名是一樣的。解決方案是重命名一個。

相關問題