您能否就如何调试ASP.NET MVC绑定给出任何一般性建议?
当一切按预期工作时,ASP.NET MVC非常棒。但是,如果某些事情没有,就像某些事情因某些未知原因而无法结合,我发现很难追查问题并发现自己花费数小时追踪一个看似简单的问题。
让我们假设您使用这样的控制器方法:
[HttpPost]
public ActionResult ShipmentDetails(Order order)
{
//do stuff
}
让我们进一步想象Order类看起来像这样:
public class Order
{
public decimal Total {get; set;}
public Customer Customer {get; set;}
}
public class Customer
{
public string Name {get; set;}
public string Phone {get; set;}
}
当控制器方法中的Order
未正确绑定时,有什么好的开始?只有部分Order
被正确绑定时,有什么好的开始?
答案 0 :(得分:25)
尽管@russ's answer很有用并且有时是必要的,但是当主要问题更多地是关于大局时,两个选项似乎都有点低。因此,我建议Glimpse。
从它的关于页面:
... Glimpse允许您直接在浏览器中调试您的网站或Web服务。 Glimpse允许您“瞥见”Web服务器中正在发生的事情。换句话说,Firebug是调试客户端代码的,Glimpse是在客户端内调试服务器。
既然您已经特别询问了数据绑定,那么您需要查看binding tab documentation。您将能够再次从文档中看到:
请参阅quick start。简言之:
http://yourhost/yourapp/Glimpse.axd
并“启用它。”答案 1 :(得分:21)
正如Darin所建议的那样,首先使用Firebug,Fiddler或其他Web调试代理工具检查从客户端发送到服务器的内容。
如果不这样做,您可能需要单步执行源代码以查看绑定期间发生的情况。
我建议这样做的两种方法是
Include the System.Web.Mvc source code project in your application and reference this。这对学习有好处,但可能不建议用于商业应用。
从Microsoft Symbol服务器下载System.Web.Mvc的符号,将您的设置更改为 debug framework source code and set a break point appropriately to step through 。
答案 2 :(得分:3)
一个好的起点是下载并安装FireBug,看看从客户端发布到服务器的内容。然后你会看到缺少什么,不正确,... Model Binding to a List之类的博客帖子也是很好的读取,以便熟悉默认模型绑定器使用的正确语法。
答案 3 :(得分:3)
答案 4 :(得分:2)
从Visual Studio一侧:
键入ModelState.Keys.ToList()
最好键入ModelState.Values.ToList()...
答案 5 :(得分:0)
在控制器方法中放置一个断点,并注意Request.Params
,以了解根据och参数实际进入控制器的内容。