我做了一個EditorTemplate在MVC 4與此代碼:EditorTemplate下拉得到錯誤的ID和不能得到驗證
@model Drexx.Models.Account
@Html.DropDownListFor(model => model.LevelId, (IEnumerable<SelectListItem>)ViewBag.LevelId, String.Empty)
我查看了此代碼:
@Html.EditorForModel();
我的模型有這樣的代碼:
[UIHint("LevelDropDown")]
[DisplayName("Level")]
public int LevelId { get; set; }
public virtual Level Level { get; set; }
我的控制器有這個代碼的獲取:
ViewBag.LevelId = new SelectList(db.Level, "Id", "Name");
我的控制器有這樣的代碼中郵:
ViewBag.LevelId = new SelectList(db.Level, "Id", "Name", account.LevelId);
這是源代碼的樣子,當我運行它:
<select data-val="true" data-val-number="The field Level must be a number." data-val-required="Feltet Level skal udfyldes." id="LevelId_LevelId" name="LevelId.LevelId">
<option value=""></option>
<option value="1">Normal</option>
<option value="2">Admin</option>
</select>
<span class="field-validation-valid" data-valmsg-for="LevelId" data-valmsg-replace="true"></span>
爲什麼它使下拉的ID爲「LevelId_LevelId」並將名稱改爲「LevelId.LevelId」? 下拉工作並顯示它應該,但驗證不工作,因爲id /名稱是錯誤的。驗證將突出顯示下拉列表,但不會顯示錯誤消息。
下拉工作完全正常之前我把它變成EditorTemplate /前我開始使用EditorForModel
進出口新的EditorTemplates所以也很難搞清楚什麼可能導致此。
如果我的editortemplate沒有帳戶,我應該怎麼強制輸入?不能看到你做什麼不同,除了你不使用ViewBag。 – DrexxDK
您的編輯器模板是強類型的帳戶,但您將UIHint屬性放置在整數屬性上。另外,因爲我沒有使用ViewBag,所以我有兩個不同名稱的不同名稱,這是正確的方法。在你的ViewBag案例中,你有一個'ViewBag.LevelId',它應該保存一些集合,另一方面你有一個名字完全相同的'LevelId'屬性,它是一個整數。 –
如果我把UIHint放在「public AccountViewModel Account」上,我得到這個:「Attribute'UIHint'在這個聲明類型上是無效的,它只對'property,indexer,field'聲明有效。如果我把UIHint放在「public virtual Level Level {get; set;}」我得到「傳入字典的模型項目的類型是'System.Int32',但是這個字典需要一個'Drexx.Models'類型的模型項目。帳戶'。」我也得到了它「public int levelId {get; set;}」 – DrexxDK