Я хочу знать, есть ли лучший способ выполнить то, что я делаю, или мой нынешний подход в порядке.Мой нынешний подход доставляет мне небольшие проблемы, поэтому мне нужно посмотреть, что я могу с этим поделать.
В моем веб-приложении MVC у меня есть раскрывающиеся списки с возможностью поиска (обрабатываются виджетами KendoUI), и я разрешаюпользователь добавляет недостающие данные в таблицу базы данных, которая обслуживает эти выпадающие списки.
Пример виджета
@(Html.Kendo().DropDownList()
.Name("Manufacturer")
.Filter("contains")
.OptionLabel("-- Select --")
.DataTextField("ManufacturerName")
.DataValueField("ManufacturerName")
.NoDataTemplate("No Data <a href=\"\\#\" data-toggle=\"modal\" data-target=\"\\#modal_addManufacturer\">Add Manufacturer</a>")
.DataSource(source => {
source.Read(read => {
read.Action("GetManufacturers", "Cars");
}).ServerFiltering(false);
}))
Данные добавляются через форму ajax в частичном представлении, которое отображается с помощью модального триггера начальной загрузки 4.0 кнопкой вшаблон данных отсутствует (см. приведенный выше пример).
Эти раскрывающиеся списки отображаются в представлениях Create
и Edit
, в представлении Create
они работают нормально и, как и ожидалось, но в представлениях Edit
,у них есть словарные ошибки.
Создать представление
@model MyProject.Models.Cars
@using (Ajax.BeginForm("Create", "Cars", new AjaxOptions
{
HttpMethod = "POST",
OnSuccess = "NotifySuccess",
OnFailure = "NotifyFailure"
},
new { @class = "form-horizontal", role = "form" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
...Form goes here with widgets etc
}
@Html.Partial("_Manufacturer")
Частичное представление всплывающей формы
@model MyProject.Models.Manufacturer
<div class="modal fade" id="modal_addManufacturer">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-body">
@using (Ajax.BeginForm("AddManufacturer", "Cars", new AjaxOptions
{
HttpMethod = "POST",
OnSuccess = "Success",
OnFailure = "Fail"
}, new { @class = "form-horizontal", role = "form" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary()
<div class="form-group">
@Html.LabelFor(l => l.ManufacturerName, new { @Class = "form-label" })
@Html.TextBoxFor(i => i.ManufacturerName, new { @Class = "form-control" })
<input type="submit" value="Add" />
<input type="reset" value="Reset" />
</div>
}
</div>
</div>
</div>
</div>
Эти ошибки, как представляется, происходят из-за фактачто метод Edit
в контроллере передает параметр Id
.Это приводит меня к самому очевидному вопросу: правильный ли это подход?Должен ли я использовать формы ajax в модальных моделях для создания данных на лету, как это особенно, когда модели, которые они используют, вызывают проблемы, когда параметр Id используется в представлениях, таких как edit.
Может ли кто-нибудь дать некоторые рекомендации о том, чтоЯ могу с этим поделать?