#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