如何调试mvc4剃刀视图

本文关键字:mvc4 剃刀 视图 调试 何调试 | 更新日期: 2023-09-27 18:19:52

我习惯了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#。

如何调试mvc4剃刀视图

您需要在视图本身中放置断点。您可以使用剃刀语法在任何东西上放置断点,例如:

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

如果您得到一个null引用异常,请在视图中使用模型的位置设置断点。

查看您看到的异常会有所帮助。我猜您在页面呈现时看到了一个异常。正如上面提到的"David L",您希望在Razor视图(Index.cshtml)中设置断点。

但为什么

它有助于理解MVC中请求/响应的生命周期。这是我发现的第一个可视化的例子。肯定还有其他人。

  • 请求被路由到您的控制器
  • 控制器返回ActionResult:return View(cnty);
  • MVC将ActionResult传递到您的视图
  • 尝试使用ActionResult时,Index.cshtml中会出现异常

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

from r in db.Clients
where r.ClientID == id
select r

是CCD_ 7。您可能会惊讶地发现,在执行return View(cnty);之前,您的代码还没有与数据库联系。试试这个:

return View(cnty.ToList());

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

@model IEnumerable<Client>

更新:

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

<system.web>
    <customErrors mode ="Off" />
</system.web>

首先,使用try块。您的异常将在捕获块中可用,用于检查、报告等。

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