Какой метод рекомендуется для динамической загрузки частичного представления, в котором есть выпадающие списки с содержимым из базы данных? - PullRequest
0 голосов
/ 14 июня 2019

У меня есть список, и я загружаюсь на свою страницу редактирования, с возможностью добавления еще. Частичное представление имеет множество раскрывающихся списков, которые в настоящее время заполняются через ViewBag. Все отлично работает при начальной загрузке, однако, когда я использую Add для добавления другой части через ajax, выпадающие списки выдают конкретную ошибку.

'Элемент ViewData, имеющий ключ' UserTypeId ', имеет тип' System.Int32 ', но должен иметь тип' IEnumerable '.'

Я чувствую, что должен быть лучший способ сделать это, но мой поиск в Google подвел меня. Любая помощь будет оценена.

Контроллер

//UserTypes is List<UserType>
//int ID
//string Name 
ViewBag.ListUserTypes = new SelectList(UserTypes, "ID", "Name");
        public ActionResult CreateNewQuotesMentions()
    {
        var model = new QuoteMention();

        return PartialView("~/Views/master/newsalert/_QuotesMentions.cshtml", model);
    }

ViewModel

 public List<QuoteMention> QuotesMentions { get; set; }

Вид

<div id="QuotesMentions">
    @foreach (var item in Model.QuotesMentions)
    {
        @Html.Partial("~/Views/Master/NewsAlert/_QuotesMentions.cshtml", item)
    }
</div>
<div>
    <input type="button" name="addQuotesMentions" id="addQuotesMentions" value="Add" />
</div>

.JS

$("#addQuotesMentions").on('click', function () {

    $.ajax({
        type: "GET",
        url: '/en/master/news-alert/CreateNewQuotesMentions',
        success: function (partialView) {
            $('#QuotesMentions').append(partialView);
        }
    });

});

$(document).on('click', ".btn-delete", function (e) {
    var container = $(this).closest('.box');
    var id = container.data('id');
    if (!id) {
        container.remove();
    } else {
        // see notes below
    }

});

ThePartialView

@model Portal.Business.QuoteMention

@using (Html.BeginCollectionItem("NewQuotes"))
{
<div class="col-sm-4">
    @Html.LabelFor(m => m.UserType, new { @class = "control-label" })
    @Html.DropDownListFor(m => m.UserTypeId, (SelectList)ViewBag.ListUserTypes,
    "-- Please Select --", new { @class = "form-control", style="width:100%;"}
    )
</div>

1 Ответ

1 голос
/ 15 июня 2019

К сожалению, ваш ViewBag очищается во время выполнения вашего метода CreateNewQuotesMentions.

Возможным решением проблемы является повторное заполнение ViewBag.ListUserTypes.Я также предлагаю взглянуть на TempData.Бывают ситуации, когда это может вас спасти.Вы можете прочитать об этом здесь .

...