2016-11-08 10 views
2

ASP.NET MVCはかなり新しいです。アイデアは非常に簡単ですが、私はそれを動作させるように見えることはできません。ASP.NET MVC:「チケット」の「詳細」の下に「コメントを追加」

私はチケットを持っています。チケットは/チケット/詳細/ [ID]の下に表示されます。このチケットの下には、コメントのリストと「コメントの追加」セクションがあります。最初はすべてを別々にテストし、手動でTicketIDを書きました。後で使用するために、現在のチケットのIDとチケット全体をこのコメントに保存する必要があります。コメントが正常に保存されたら、チケットのページを更新する必要があります。

public ActionResult Create([Bind(Include = "ID, body")] TicketComment ticketComment) 
    { 
     Ticket ticket = db.Tickets.Find(ticketComment.ID); 

     if (ModelState.IsValid) 
     { 
      ticketComment.UserID = User.Identity.GetUserId(); 
      ticketComment.AanmaakDateTime = DateTime.Now.ToLocalTime(); 
      ticketComment.UpdateDateTime = DateTime.Now.ToLocalTime(); 
      ticketComment.ParentTicketId = ticket.ID; 
      ticketComment.ParentTicket = ticket; 
      db.TicketComments.Add(ticketComment); 
      db.SaveChanges(); 

      return View(ticket); 
     } 

     return View(ticket); 
    } 

が、復帰に:私は、私は私のTicketCommentsController.csに次の事を試してみました、私のチケットの詳細

<div class="panel panel-info"> 
<div class="panel-heading">Comments</div> 
<div class="panel-body"> 
    @{ 
     Html.RenderAction("create", "TicketComments"); 
    } 
</div> 

の下にこれを試してみましたASPでの以前の経験に基づいて

それは私に腹を立てます:

"辞書に渡されたモデルアイテムは、 'System.Data.Entity.DynamicProxies.Ticket_5309A05301E0FE6AD5614FE3ED9E54D6FAB46DFEAFB2A38B4341FACD04441DF5'タイプですが、この辞書には 'Cronos.Models.TicketComment'タイプのモデルアイテムが必要です。

私は次の作業に混乱します。私が読んだことの1つは、TicketsControllerのTicketCommentsControllerをマージすることでしたが、これは面倒です。

誰でも手助けできますか?

答えて

0

ビューの内容を投稿することをおすすめします。例外メッセージによると、あなただけのビューに

TicketComment 

を渡すことができ

(最初の行を確認し、それがこのビューでモデルを定義@model Cronos.Models.TicketCommentをする必要があります)代わりにチケットをそのビューに渡しました。

+0

私はあなたが何を意味するか参照してください。実現するまでにはしばらく時間がかかりましたが、戻りビューを空のままにしておくと、TicketCommentsビューのCreate.cshtmlを経由しました。私は戻り値が特定のチケットの詳細ページに行くと思った。私はページに戻って終わるが、コメントのテキストボックスはいっぱいです。コメントが保存された後にページを更新する正しい方法であれば、どのような考えですか? –

0

ビューではTicketCommentが必要ですが、代わりにチケットプロキシを送信し、デフォルトの作成ビューを使用しました。成功の代わりに

return View(ticket); 

リダイレクトの

保存し、詳細アクションがアップ見てみましょうと、独自のモデルを表示。 PRG pattern

[HttpPost] 
public ActionResult Create([Bind(Include="ID, comments")] ticketComment) 
{ 
    if (ModelState.IsValid) 
    { 
     ... 
     return RedirectToAction("Details", "Ticket", new { Id = ticket.ID }); 
    } 
    return View(ticketComment); 
} 

よりMVC中心の例:https://www.stevefenton.co.uk/2011/04/asp-net-mvc-post-redirect-get-pattern/

+0

RedirectToAction ....私はそれがうまくいかなければならないと思うように聞こえる。残念ながら私は例外が発生します:{"子アクションはリダイレクトアクションを実行できません"} –

+0

'Html。RenderAction( "create"、 "TicketComments"); 'はフォームであり、ユーザーがフォームPOSTを実行するためにトリガーされます。あなたが今持っている方法は、(子のアクションとして)トリガーしますビューがレンダリングするとすぐに作成します。 – Jasen

関連する問題