如何调试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#。
您需要在视图本身中放置断点。您可以使用剃刀语法在任何东西上放置断点,例如:
@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
}
}