2016-11-08 49 views
2

我对ASP.NET MVC相当陌生。这个想法非常简单,但我似乎无法使其工作。ASP.NET MVC:“票据”的“详细信息”下的“添加评论”

我有一张“门票”,可以在/ Tickets/Details/[id]下查看。该票据下方是评论列表和“添加评论”部分。在开始时,我分别测试了它并手动编写了TicketID。现在我需要将当前票证的ID和整个票据保存在此评论中供以后使用。评论成功保存后,应该刷新页面(票证)。

基于ASP中以往的经验我想这下我的票信息

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

我想在我的TicketCommentsController.cs以下的事情:

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); 
    } 

,但在回它给了我一个消息:

“传递到字典中的模型项类型为'System.Data.Entity.DynamicProxies.Ticket_5309A05301E0FE6AD5614FE3ED9E54D6FAB46DFEAFB2A38B4341FACD04441DF5',但该字典需要一个'Cronos.Models.TicketComment'类型的模型项。

我很困惑下一步该做什么。我读过的一件事是合并TicketCommentsController TicketsController,但这感觉混乱。

任何人都可以帮忙吗?

回答

0

我建议你发布视图是什么。 根据异常消息,你只能通过一个

TicketComment 

到您的视图(检查第一线,应该是@model Cronos.Models.TicketComment定义在此视图模型)

您将Ticket传递给该视图。

+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

相关问题