2017-04-04 14 views
0

上記のエラーメッセージが表示されます。私は他の問題を見てきましたが、エラーを特定することはできません。ここに私がコントローラのために持っているコードがあります。System.InvalidOperationException:メッセージを送信するとき

のSystem.InvalidOperationException:キーを持つViewDataをアイテムタイプ「可能System.String」である「RecieverID」は型「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> 

わかりませんから来ているが、どんな助けも大いに評価されるだろう。

+0

Stacktraceで何が起きているのか、あなたの例外でInnerExceptionエラー? –

答えて

0

まず、文法ナチではありませんが、「受信者」ではなく「受信者」である必要があります。

第2に、model.RecieverIDはコレクションではなく単一のフィールドを示します。

"新SelectListの(..." コレクションです

これを参照してください:。 MVC - Set selected value of SelectList

+0

ええ、私はデータベースをやっていませんでした。それはグループプロジェクトであり、他の誰かがデータベースをやるという仕事をしていました。私もそれに気づいた。しかし、リンクのおかげで! –

0

次のようなページのためのViewModelを作成することができます。

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

あなたの割り当てコントローラの値を入力してから、次のようにします。

@Html.DropDownListFor(model => model.ReceivedMessage.ReceiverID, Model.ReceiverList, new { @class = "form-control" }) 
関連する問題