Должен ли я использовать формы Ajax в частичных представлениях MVC для добавления новых данных в режиме реального времени? - PullRequest
0 голосов
/ 18 мая 2018

Я хочу знать, есть ли лучший способ выполнить то, что я делаю, или мой нынешний подход в порядке.Мой нынешний подход доставляет мне небольшие проблемы, поэтому мне нужно посмотреть, что я могу с этим поделать.

В моем веб-приложении 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.

Может ли кто-нибудь дать некоторые рекомендации о том, чтоЯ могу с этим поделать?

...