繁体   English   中英

System.InvalidOperationException:提交消息时

[英]System.InvalidOperationException: When submitting a message

我收到上面的错误消息。 我看过其他人的问题,似乎无法查明错误。 这是我为控制器编写的代码。 这是我得到的错误:

System.InvalidOperationException:拥有键“ RecieverID”的ViewData项的类型为“ System.String”,但必须为类型的“ IEnumerable <SelectListItem>”

public ActionResult Create()
    {
        ViewBag.RecieverID = new SelectList(db.AspNetUsers, "Id", "Email");
        return View();
    }


    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create([Bind(Include = "RecieverID,TEXT")] Message message)
    {
        if (ModelState.IsValid)
        {
            var mes = new Message
            {
                SenderID = User.Identity.GetUserId(),
                DATETIMEMADE = DateTime.Now,
                TEXT = message.TEXT
            };
            db.Messages.Add(mes);
            db.SaveChanges();
            return RedirectToAction("Index");
         }
        ViewBag.ReceiverID = new SelectList(db.AspNetUsers, "Id", "Email", message.RecieverID);
        return View(message);
    }

之后,这是我创建消息的观点:

@model MUE.Models.Message

@{
    ViewBag.Title = "Create";
}

<h2>Create</h2>

@using (Html.BeginForm()) 
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <h4>Message</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })


        <div class="form-group">
            @Html.LabelFor(model => model.RecieverID, "RecieverID", htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.DropDownList("RecieverID", null, htmlAttributes: new { @class = "form-control" })
                @Html.ValidationMessageFor(model => model.RecieverID, "", new { @class = "text-danger" })
            </div>
        </div>



        <div class="form-group">
            @Html.LabelFor(model => model.TEXT, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.TEXT, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.TEXT, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default"   />
            </div>
        </div>
    </div>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

不知道问题出在哪里,但是任何帮助将不胜感激。

首先,不要成为纳粹语法,但应该是“接收者”而不是“接收者”。

其次,model.RecieverID指示单个字段,而不是集合。

“新的SelectList(...)”是集合。

请参考: MVC-设置SelectList的选定值

您可以为页面创建一个ViewModel,例如:

public class MyViewModel
{
    public SelectList ReceiverList
    public MUE.Models.Message ReceivedMessage
}

在控制器中分配值,然后执行以下操作:

@Html.DropDownListFor(model => model.ReceivedMessage.ReceiverID, Model.ReceiverList, new { @class = "form-control" })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM