我该如何调试mvc4 razor视图?

时间:2013-06-24 17:47:15

标签: c# asp.net-mvc debugging razor

我已经习惯了C#和vb.net winforms,通常可以通过设置断点并单步执行代码来找到我需要的所有错误。

我想知道我做错了什么。

我在这里放置一个断点:

public ActionResult Index(int id)
{
    var cnty = from r in db.Clients
               where r.ClientID == id
               select r;

    if (cnty != null) // breakpoint here
    {
        return View(cnty); // F11 jumps over this section of code returning me to the error page below.
    }
    return HttpNotFound();
}

然而,我再也不知道它究竟在哪里或为什么会出错。我怎样才能找出原因或更好的错误呢?

我正在使用VS2012 mvc4 c#。

3 个答案:

答案 0 :(得分:11)

您需要在视图中放置断点。您可以使用razor语法在任何内容上放置断点,例如:

@Html.ActionLink
@{ var x = model.x; }

如果您获得空引用异常,请在视图中使用模型的位置放置断点。

答案 1 :(得分:3)

看到您看到的异常会有所帮助。我猜你在页面呈现时看到了异常。正如上面标识的“David L”,您想要在Razor视图中设置断点(Index.cshtml)。

但为什么?

有助于理解MVC中请求/响应的生命周期。这是first example I found with a visual。肯定会有其他人。

  • 请求已路由到您的控制器
  • Controller返回ActionResultreturn View(cnty);
  • MVC将ActionResult传递给您的视图
  • 尝试使用Index.cshtml时,ActionResult会发生异常。

我将推测它与已处理的数据库上下文对象有关。根据您使用的ORM,

的结果
from r in db.Clients
where r.ClientID == id
select r

IQueryable<Client>。在执行return View(cnty);之前,您可能会惊讶地发现您的代码尚未联系数据库。试试这个:

return View(cnty.ToList());

同样,您看到的确切错误很重要。我的建议假定Index.cshtml以:

开头
@model IEnumerable<Client>

<强>更新

根据下面的OP评论,堆栈跟踪不可用。有许多问题专门用于在开发过程中查看浏览器中的堆栈跟踪。至少确认在web.config

中设置了以下内容
<system.web>
    <customErrors mode ="Off" />
</system.web>

答案 2 :(得分:0)

首先,使用try块。您的例外将在catch块中提供,以便进行检查,报告等。

public ActionResult Index(int id)
        {
            try
            {
            var cnty = from r in db.Clients
                       where r.ClientID == id
                       select r;

            if (cnty != null) // breakpoint here
            {
                return View(cnty); // F11 jumps over this section of code returning me to the error page below.
            }
            return HttpNotFound();
            }
            catch (Exception ex)
            { 
                  //report error
            }
        }