我拉我的頭髮試圖讓下拉列表中我的剃刀視圖的工作,我無法找到一個可行的解決方案,我只能假設我失去了一些東西明顯..DropDownListFor總是空的回發
我正在嘗試創建一個註冊頁面,其中包含使用文本框(正常工作)和下拉列表從查找表中選擇項目並將該項作爲外鍵插入到我的新記錄中的學生的個人詳細信息。所以,我的學生有一個標題 - 我填充下拉列表中的所有Salutations & ID從我的數據庫中,允許用戶選擇一個,然後保存這與我的新學生記錄回發給控制器。下拉列表填充正常,值都在那裏,用戶可以選擇一個值,但在回發時它總是爲空?
下面給出的例子涉及到我的模型中只有一個這樣的領域,有很多。在試圖讓它起作用時,我使用了所有的文本框,並且只使用了一個下拉框,所以問題在某處,而不是隱藏在其他代碼中。
我的模型(ViewCandidate)有(與其他字段一起):
public int SalutationID {get; set;}//foreign key to be saved when I pass the values from my View object to a domain entity object
public Dictionary<int, string> Salutations {get; set;} //key/value pairs to fill the dropdown in the view
當我創建控制器的型號我填寫像這樣的下拉菜單:
public ViewResult Link()
{
return View(new ViewCandidate{ Salutations = GetSalutations(entities) }); //'entities' is my Entity Framework context, all the entities in my data model/database
}
public static Dictionary<int, string> GetSalutations(DBEntities entities)
{
Dictionary<int, string> dictionary = new Dictionary<int, string>();
foreach(var s in entities.Salutations)
{
dictionary.Add(s.SalutationID, s.Salutation);
}
return dictionary;
}
在我的剃鬚刀查看我使用的模型綁定是這樣的:
@model ViewModels.ViewCandidate
...
<div class="align-center">
<label>Title</label>
@Html.DropDownListFor(x => x.SalutationID, new SelectList(Model.Salutations, "Key", "Value"), "Please select your title", new { @class="form-control"})
</div>
當我運行應用程序並導航到鏈接控制器頁面這是爲下拉菜單生成的html:
<div class="align-center">
<label>Title</label>
<select class="form-control" data-val="true" data-val-number="The field SalutationID must be a number." data-val-required="The SalutationID field is required." id="SalutationID" name="SalutationID"><option value="">Please select your title</option>
<option value="1">Mr</option>
<option value="2">Mrs</option>
<option value="3">Miss</option>
<option value="4">Ms</option>
<option value="5">Master</option>
<option value="6">Doctor</option>
</select>
</div>
使用正確的值生成下拉菜單就好了。但是,當我填寫表格的其餘部分,並提交後回來,我帶回到這裏在Visual Studio(從我的Razor視圖行):
@Html.DropDownListFor(x => x.SalutationID, new SelectList(Model.Salutations, "Key", "Value"), "Please select your title", new { @class="form-control"})
,出現以下錯誤:
An exception of type 'System.ArgumentNullException' occurred in System.Web.Mvc.dll but was not handled in user code
Value cannot be null.
Parameter name: items
'Items'是SelectList構造函數中IEnumerable的參數名稱,它具有項目並已全部呈現它們。在我的數據庫中或在視圖中呈現的salutation記錄都不爲NULL。我無法得到這個工作,它讓我發瘋,任何人都可以幫忙?
如果它有什麼區別我正在使用實體框架 - 所以我最終保存的實體是'Candidate',我將ViewCandidate中的值傳遞給視圖中創建的值。我重複創建Dictionary<int, string>
的禮物是EF對象。在View對象中包裝這些也沒有幫助。
當您返回視圖時,您需要重新分配Model.Salutations的值(由於Salutations爲空而出現錯誤) – 2015-02-08 21:11:04