Нет элемента ViewData типа ‘IEnumerable’, который имел бы ключ ‘SelectedRecipientId’

#c# #asp.net-mvc #listbox

#c# #asp.net-mvc #listbox

Вопрос:

У меня проблема с моим методом Post, при отправке формы он выдает эту ошибку

 There is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key 'SelectedRecipientId'.
  

У меня есть поле списка, пустое при получении представления, тогда я заполню его с помощью ввода текстового поля, а затем при отправке формы я столкнусь с этой ошибкой, кто-нибудь может помочь мне разобраться, в чем проблема?

это моя ViewModel

 public class SendViewModel
{
    ...

    [Phone(ErrorMessage = "Invalid Phone Number")]
    public string MobileNumber { get; set; }

    public HttpPostedFileBase File { get; set; }

    public string ScheduleTime { get; set; }

    //public string[] SelectedRecipientId { get; set; }
    public IEnumerable<SelectListItem> Recipients { get; set; }
}
  

Это мое представление MVC Listbox

 <div>
                        <label><strong>Recipients</strong> </label>
                        @Html.ListBox("SelectedRecipientId", Model.Recipients, new { id = "recipientList", style = "width: 250px; height: 160px;", name = "SelectedRecipientId" })
                    </div>
  

Этот контроллер я использую для получения и публикации значения

  //
    // GET: /Message/Send
    public ActionResult Send()
    {


        SendViewModel model = new SendViewModel();

        model.Recipients = GetRecipients();

        model.Times = GetTimes();


        return View(model);

    }



    [HttpPost]
    public ActionResult Send(string message, string[] SelectedRecipientId)
    {
        var model = new SendViewModel();

        model.Times = GetTimes();

        if (ModelState.IsValid)
        {

        var User = GetLoggedInUserID();
  

         var getContactId = _contactService.GetContactById(model.SenderId);


        var SenderId = senderIdList.ToString();

            if(SenderId == null)
            {
                SenderId = defaultSenderId;
            }



        if (SenderId != null amp;amp; message != null amp;amp; SelectedRecipientId != null)
        {

                if (model.ScheduledDate == DateTime.Now)
                {
                    _messageService.SendMessage(User, SenderId, model.Message, SelectedRecipientId);

                    if (groupListing != null)
                    {
                        _messageService.SendGroupMessage(User, SenderId, model.GroupId, model.Message, SelectedRecipientId);
                    }

                    return RedirectToAction("/UserAccount/SendMessageConfirmation");
                }


                if (model.ScheduledDate != DateTime.Now)
                {
                    _messageService.AddScheduledMessage(User, SenderId, model.Message, model.ScheduledDate, SelectedRecipientId);
                }

            }
            else
                ViewBag.Error = "Sender ID, Message Text and Recipient are Required to send your message";
        return View(model);
        }


        model.Recipients = GetRecipients();
        return View(model);
    }
  

это метод GetRecipients()

  private List<SelectListItem> GetRecipients()
    {
        var recipientList = new List<SelectListItem>() 
        {};

        return recipientList;
    }
  

Это модель, в которую я ее отправляю:

  public class SentMessage : IDataObject
{
    public int Id { get; set; }
    public string Message { get; set; }
    public DateTime SendDate { get; set; }
    public int RecipientCount { get; set; }
    public int PageCount { get; set; }
    public double CreditsUsed { get; set; }
    ...

    public virtual ICollection<MessageRecipient> Recipients { get; set; }

}
  

получатель сообщения открытого класса: IDataObject
{
public int Id { получить; установить; }
public int MessageId { получить; установить; }
общедоступное отправленное сообщение { get; set; }
общедоступная строка MobileNumber { получить; установить; }

}

Используемый мной метод обслуживания также выглядит следующим образом

 int SendMessage(int userId, string senderId, string message, IEnumerable<string> recipients);
  

Вот и все…

пожалуйста, мне нужна помощь о том, как я могу успешно отправить значения listbox этим получателям с IEnumerable… Заранее спасибо

Комментарии:

1. Обратите внимание, пожалуйста, я не получаю никакой коллекции из базы данных в ListBox, я только размещаю значения внутри него… Спасибо

2. Да, потому что я передал параметр для этого, потому что я думал, что это было причиной

3. Возьмите свойство в классе ur SendViewModel ….. общедоступная строка SelectedRecipientId{ получить; установить; }

4. Он все равно выдаст ошибку после того, как я ее получу

5. Если вы проверите свой отрисованный html, действительно ли вы видите, что для свойства name вашего элемента установлено значение SelectedRecipientId