ASP.NET MVC - модель не привязана к Ajax.BeginForm в частичном представлении - PullRequest
0 голосов
/ 18 мая 2018

У меня есть частичное представление AddOptionPartial , в котором используется модель OptionViewModel .Это частичное представление загружается, когда загружается его родительский элемент Build .В этом представлении Build используется модель BuildViewModel .

Частичное загружается с использованием @{Html.RenderPartial("AddOptionPartial", new OptionViewModel());}.

Частичное выглядит следующим образом:

@model SurveyService.ViewModels.OptionViewModel

@{
    Layout = null;
}
@using (Ajax.BeginForm("AddOption", "Manage", new AjaxOptions { OnSuccess = "handleSavedOptionChoice(data)", HttpMethod = "Post" }))
{ 
    <div class="form-group">
        @Html.LabelFor(m => m.ChoiceText)
        @Html.TextBoxFor(m => m.ChoiceValue, new { @class = "form-control" })
    </div>
    @Html.LabelFor(m => m.ChoiceValue)
    <div class="form-group">
        <div class="btn-group" data-toggle="buttons">
            <label class="btn btn-primary">
                @Html.RadioButtonFor(m => m.ChoiceValue, 1) True
            </label>
            <label class="btn btn-primary">
            @Html.RadioButtonFor(m => m.ChoiceValue, 0) False
            </label>
            <label class="btn btn-primary active">
                @Html.RadioButtonFor(m => m.ChoiceValue, 2, true) Text
            </label>
        </div>
    </div>
    <button type="submit">Create</button>
}

Как вы видите, я пытаюсь опубликовать эту формуиспользуя вызов Ajax.Вызов относится к этой функции:

public ActionResult AddOption(OptionViewModel model)
{
    ***content of function***
}

Однако при отладке модель представляет собой объект OptionViewModel, не содержащий данных.Я не могу найти причину этого на SO, кто-то может посоветовать, пожалуйста?

Ответы [ 3 ]

0 голосов
/ 18 мая 2018

@{Html.RenderPartial("AddOptionChoicePartial", new OptionViewModel());} проходит именно это;новый, предположительно пустой, OptionViewModel.

Вы должны либо передать предварительно заполненную модель (из родительского элемента BuildViewModel), например @{Html.RenderPartial("AddOptionChoicePartial", parentViewModel.SomeModel);}, либо создать модель представления с нуля в AddOptionChoice.

(Обратите внимание, что вы звоните "AddOptionChoicePartial" из Html.RenderPartial, но действие контроллера называется AddOptionChoice. Они должны совпадать)

Также при попытке воссоздать модельиз ваших комментариев вы используете ChoiceText и ChoiceValue, которые не соответствуют OptionText и OptionValue.

0 голосов
/ 22 мая 2018

Ошибка в найденном коде:

@Html.LabelFor(m => m.ChoiceText)
@Html.TextBoxFor(m => m.ChoiceValue, new { @class = "form-control" })

@Html.RadioButtonFor(m => m.ChoiceValue, 1) True

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

Всем, кто столкнется с подобной проблемой в будущем: отладьте функцию контроллера и посмотрите на ModelState в отладчике.

Спасибо всем, кто посоветовал.

0 голосов
/ 18 мая 2018

Попробуйте это:

       @using (Ajax.BeginForm("AddOption", "Manage",null, new AjaxOptions { OnSuccess = "handleSavedOptionChoice(data)", HttpMethod = "Post" }))



            public ActionResult AddOptionChoice([System.Web.Http.FromBody]OptionViewModel model)
            {
                ***content of function***
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...