如何将ListBoxFor值保存到MVC5中的数据库

时间:2014-07-01 13:08:41

标签: c# asp.net-mvc-5

我想将所有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

1 个答案:

答案 0 :(得分:0)

感谢您提供错误详情,

虽然我在评论中提到的事情是正确的,“HTML Element Name”和“Model Property Name”应该类似于发布值但是这里的问题是因为你得到的错误不同。

确保在渲染视图之前正确填充Model.Recipients属性。您调用视图的操作应为Model.Recipients属性分配正确的值。您的属性为null,因此抛出了对象引用错误。

实际上,错误应该在表单的初始加载时发生,而不是在发布之后。 如果在发布表单后仍然存在,那么有以下可能性。 当您添加ModelState.IsValid时,检查它似乎没有得到满足,并且有一些验证错误导致Post操作方法再次呈现相同的视图(您在其他部分没有做任何其他的提供者)以及何时视图再次加载它没有填充选择列表,因为您没有在post方法中添加该代码。因此,如果存在任何验证错误,可能的解决方案是在POST操作上再次填充Model.Recipients。我希望你明白我的观点