我想将所有listBoxFor值保存到数据库...当发布表单时我有这个错误说对象没有设置为对象的瞬间,任何人都可以帮我弄清问题是什么?
这是所有代码
这是包含所有值的列表框代码:
@Html.ListBoxFor(model => model.SelectedRecipientId, new MultiSelectList(Model.Recipients, "ID", "RecipientNumbers"), new { id = "recipientList", style = "width: 250px; height: 160px;", name = "recipientList" })
这是我的View模型
public class SendViewModel
{
public SendViewModel()
{
ScheduledDate = DateTime.Now;
}
public int Id { get; set; }
public string Message { get; set; }
public DateTime ScheduledDate { get; set; }
public IEnumerable<SelectListItem> Times { get; set; }
public string[] SelectedRecipientId { get; set; }
[Required]
public IEnumerable<SelectListItem> Recipients { get; set; }
}
这是我试图写给
的模型public class SentMessage
{
public int Id { get; set; }
public string Message { get; set; }
public string SenderId { get; set; }
public DateTime SendDate { get; set; }
public int RecipientCount { get; set; }
...
public virtual ICollection<MessageRecipient> Recipients { get; set; }
}
这是我的帖子控制器
if (ModelState.IsValid)
{
if (model.ScheduledDate == DateTime.Now)
{
_messageService.SendMessage(User, SenderId, model.Message, model.SelectedRecipientId);
return Redirect("/UserAccount/SendMessageConfirmation");
}
}
最后这是消息服务参数集合
int SendMessage(int userId, string senderId, string message, IEnumerable<string> recipients);
这是将视图中的所有数据保存到数据库的签名,IEnumerable<string> recipients
是获取列表框中所有值的参数responsibl。
如何进行处理以便能够保存到数据库中。
这是错误堆栈跟踪
Server Error in '/' Application.
对象引用未设置为对象的实例。
描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.NullReferenceException:未将对象引用设置为对象的实例。
来源错误:
第68行: 第69行:收件人 第70行:@ Html.ListBoxFor(model =&gt; model.SelectedRecipientId,new MultiSelectList(Model.Recipients,“ID”,“RecipientNumbers”),new {id =“recipientList”,style =“width:250px; height:160px ;“,name =”SelectedRecipientId“}) 第71行: 第72行:
源文件:c:\ Development \ Projects \ SMSXChange \ SmsXchange \ XChange.MVC \ Views \ Message \ Send.cshtml Line:70
堆栈追踪:
[NullReferenceException:对象引用未设置为对象的实例。] ASP._Page_Views_Message_Send_cshtml
答案 0 :(得分:0)
感谢您提供错误详情,
虽然我在评论中提到的事情是正确的,“HTML Element Name
”和“Model Property Name
”应该类似于发布值但是这里的问题是因为你得到的错误不同。
确保在渲染视图之前正确填充Model.Recipients属性。您调用视图的操作应为Model.Recipients
属性分配正确的值。您的属性为null,因此抛出了对象引用错误。
实际上,错误应该在表单的初始加载时发生,而不是在发布之后。
如果在发布表单后仍然存在,那么有以下可能性。
当您添加ModelState.IsValid
时,检查它似乎没有得到满足,并且有一些验证错误导致Post操作方法再次呈现相同的视图(您在其他部分没有做任何其他的提供者)以及何时视图再次加载它没有填充选择列表,因为您没有在post方法中添加该代码。因此,如果存在任何验证错误,可能的解决方案是在POST操作上再次填充Model.Recipients
。我希望你明白我的观点