ПРИМЕЧАНИЕ. Код обновлен, чтобы принять во внимание комментарии и ответы, сделанные ниже.Проверка подлинности модели всегда возвращает значение false с помощью выпадающего списка
В моем приложении MVC мне иногда нужно ссылаться на другие объекты (например, отношения «многие ко многим» или отношения «один ко многим»).
Так у меня есть эта модель:
public class ObjInfo
{
[Required(ErrorMessage = "Obj ID is required.")]
[Display(Name = "ObjID")]
public int m_Id { get; set; }
[Required(ErrorMessage = "Obj Name is required.")]
[Display(Name = "Obj Name")]
public string m_Name { get; set; }
[Display(Name = "Obj Number")]
public int m_Number { get; set; }
(...)
[Required(ErrorMessage = "Other Obj is required.")]
[Display(Name = "OtherObj")]
public int m_OtherObjID { get; set; }
public OtherObjInfo m_OtherObj { get; set; }
(...)
}
У меня есть по умолчанию и параметры конструктора, а также и может показать их по мере необходимости, хотя я не уверен, что они виноваты. Так или иначе.
В моем контроллере, у меня есть два создание методов следующих MVC методы:
//
// GET: /Obj/Create
public ActionResult Create()
{
ViewBag.List = new SelectList(PopulateDDLs(), "OtherObj", "Other obj ID");
return View();
}
//
// POST: /Obj/Create
[HttpPost]
public ActionResult Create(Objinfo obj)
{
if (ModelState.IsValid)
{
m_ObjManager.CreateObj(obj);
return RedirectToAction("SearchIndex");
}
ViewBag.List = new SelectList(PopulateDDLs(), "OtherObj", "Other obj ID");
return View(obj);
}
И, наконец, вот как мои "Создать" вид закодирован:
@model MyApp.Models.ObjInfo
@{
ViewBag.Title = "Create";
}
<h2>Create</h2>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>OBJ</legend>
<div class="editor-label">
@Html.LabelFor(model => model.m_Id)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.m_Id)
@Html.ValidationMessageFor(model => model.m_Id)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.m_Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.m_Name)
@Html.ValidationMessageFor(model => model.m_Name)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.m_Number)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.m_Number)
@Html.ValidationMessageFor(model => model.m_Number)
</div>
(...)
<div class="editor-label">
@Html.LabelFor(model => model.m_OtherObj , "Other Obj")
</div>
<div class="editor-field">
@Html.DropDownList(model => model.m_OtherObjID, ViewBag.List as SelectList, "--- Select Other Obj ---", new {@class = "OtherObjInfo "})
@Html.ValidationMessageFor(model => model.m_OtherObj)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
В принципе, проблема заключается в том, что каждый раз, когда я нажимаю кнопку «Создать», валидация ModelState всегда ложна для OtherObj, даже если что-то выбрано в раскрывающемся списке. Все остальные значения верны, кроме этого.
Я не понимаю, почему, и я был бы очень признателен за вашу помощь в этом, спасибо за вашу помощь!
После кода отредактированный **
Теперь я получаю аварии, как я вхожу в "Создать" вид:
DataBinding: 'System.String' does not contain a property with the name 'OtherObj'.
Именно на линии, где находится мой dropdownlistfor.
Предполагается, что данные datavalueField и dataTextField относятся к тому, что именно?
В чем разница между вашим помощником выпадающего списка и другими помощниками? –
Err, нет, в настоящее время он отображает имя OtherObj (если я правильно понял ваш вопрос) – hsim
вам не приходило, что у каждого другого помощника есть ** Для ** в этом разница? –