Для этого объекта не определен конструктор без параметров.при работе с MultiSelectList - PullRequest
1 голос
/ 08 февраля 2012

это, наверное, самая неприятная ошибка, с которой я столкнулся.

У меня есть Канал сущности, который имеет много связей с рекламными местами. При создании пользователь может выбрать, какие рекламные места они хотят включить в свой канал.

У меня есть эта модель:

[Required]
[Display(Name = "Name")]
public string ChannelName { get; set; }

[Display(Name = "Description")]
public string ChannelDescription { get; set; }

//TODO: Add Sub Publisher Drop-Down

[Required(ErrorMessage = "You must select at least one Ad Slot.")]
[Display(Name = "Ad Slot(s)")]
public MultiSelectList AdSlots { get; set; }

и это на мой взгляд:

<div class="field">
    @Html.LabelFor(m => m.ChannelName)
    @Html.TextBoxFor(m => m.ChannelName)
    @Html.ValidationMessageFor(m => m.ChannelName)
</div>
<div class="field">
    @Html.LabelFor(m => m.ChannelDescription)
    @Html.TextAreaFor(m => m.ChannelDescription, new { @class = "description" })
    @Html.ValidationMessageFor(m => m.ChannelDescription)
</div>
<div class="field">
    @Html.LabelFor(m => m.AdSlots)
    @Html.ListBoxFor(m => m.AdSlots, new MultiSelectList(new[] { new { Value = "", Text = "" } }, "Value", "Text", new[] { "" }), new { Class = "multiselect", Multiple = "multiple", Size = 12 })
    @Html.ValidationMessageFor(m => m.AdSlots)
</div>

Это мои действия контроллера, которые обрабатывают обработку:

//GET: /publishers/channels/new
public ActionResult New()
{
    return View();
}

//POST: /publishers/channels/new
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult New(Models.Channels.Create channelModel)
{
    if (ModelState.IsValid)
    {
        // Channel
        Core.Linq.APMaster.Channel channel = new Core.Linq.APMaster.Channel();
        channel.PublisherId = PublisherId;
        channel.Guid = Guid.NewGuid();
        channel.ChannelName = channelModel.ChannelName;
        channel.ChannelDescription = channelModel.ChannelDescription;
        channel.DateCreated = DateTime.UtcNow;
        channel.UserCreated = PublisherId;
        //TODO: Fix CreatedFromIP data-type bug.
        channel.CreatedFromIP = 0;
        channel.IsActive = true;
        channel.IsCustom = false;
        myDBContext.APMasterDBC.Channels.InsertOnSubmit(channel);

        // Ad Slots
        foreach (SelectListItem adSlotModel in channelModel.AdSlots)
        {
            Core.Linq.APMaster.ChannelAdSlot channelAdSlot = new Core.Linq.APMaster.ChannelAdSlot();
            channelAdSlot.ChannelId = channel.ChannelId;
            channelAdSlot.AdSlotId = int.Parse(adSlotModel.Value);
            channelAdSlot.IsActive = true;
            myDBContext.APMasterDBC.ChannelAdSlots.InsertOnSubmit(channelAdSlot);

        }

        myDBContext.APMasterDBC.SubmitChanges();

        TempData["flash"] = "Your Channel Has Been Created";

        return RedirectToAction("Index");
    }
    else
    {
        TempData["flash"] = "Your Channel Has Not Been Created";
    }

    return View(channelModel);
}

Как видите, я пытаюсь вставить много рекламных мест из MultiSelectList. Однако я продолжаю получать: для этого объекта не определен конструктор без параметров.

Кто-нибудь знает, почему это так? Может кто-нибудь сказать, пожалуйста, что я делаю не так? Почему это бросает это?

1 Ответ

1 голос
/ 08 февраля 2012

Я узнал благодаря этому сообщению: Передайте SelectList "SelectedValue" в метод действия контроллера

Что тип модели должен быть простым (например, int []), а затем я используюViewData для заполнения списка.

...