我已经习惯了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#。
答案 0 :(得分:11)
您需要在视图中放置断点。您可以使用razor语法在任何内容上放置断点,例如:
@Html.ActionLink
@{ var x = model.x; }
如果您获得空引用异常,请在视图中使用模型的位置放置断点。
答案 1 :(得分:3)
看到您看到的异常会有所帮助。我猜你在页面呈现时看到了异常。正如上面标识的“David L”,您想要在Razor视图中设置断点(Index.cshtml
)。
但为什么?
有助于理解MVC中请求/响应的生命周期。这是first example I found with a visual。肯定会有其他人。
ActionResult
:return View(cnty);
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
}
}