调试ASP.NET MVC绑定的最佳实践

mkl*_*ein 48 asp.net-mvc

你能给我一些关于如何调试ASP.NET MVC Binding的一般建议吗?

当一切按预期工作时,ASP.NET MVC非常棒.但是,如果某些事情没有,就像某些事情因某些未知原因而无法结合,我发现很难追查问题并发现自己花费数小时追踪一个看似简单的问题.

让我们假设您使用如下控制器方法:

[HttpPost]
public ActionResult ShipmentDetails(Order order)
{
    //do stuff
}
Run Code Online (Sandbox Code Playgroud)

让我们进一步想象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;}
}
Run Code Online (Sandbox Code Playgroud)

Order在控制器方法中没有正确绑定时,有什么好的起点?只有部分Order正确绑定时,有什么好的开始?

Kal*_*son 26

尽管@ russ的答案很有用并且有时是必要的,但是当主要问题更多的是关于大局时,两个选项似乎都有点低.因此,我推荐Glimpse.

从它的关于页面:

... Glimpse允许您直接在浏览器中调试您的网站或Web服务.Glimpse允许您"瞥见"Web服务器中正在发生的事情.换句话说,Firebug是调试客户端代码的,Glimpse是在客户端内调试服务器.

既然您已经专门询问了数据绑定,那么您将需要查看绑定选项卡文档.您将能够再次从文档中看到:

  1. Ordinal:MVC模型绑定基础结构尝试绑定可用数据的顺序
  2. Model Binder:在特定场景中使用的Model Binder
  3. 属性/参数:Binder试图绑定的东西的名称
  4. 类型:Binder试图绑定的东西的类型
  5. 尝试过的价值提供者:Binder试图用来获得给定价值的提供商(以及是否成功)
  6. 尝试价值:提供商必须使用的实际价值(发布类型对话等)
  7. 文化:用于解析原始值的文化原始值:提供者必须使用的原始值(预类型对话等)

请参阅快速入门.简述:

  1. 安装glimpse.mvc3
  2. 转到http://yourhost/yourapp/Glimpse.axd并"打开它".
  3. 单击应用程序中任意视图右下角的一瞥图标以获取详细信息.


Rus*_*Cam 21

正如Darin所建议的那样,首先使用Firebug,Fiddler或其他Web调试代理工具检查从客户端发送到服务器的内容.

如果做不到这一点,您可能需要单步执行源代码以查看绑定期间发生的情况.

我建议这样做的两种方法是

  1. 在您的应用程序中包含System.Web.Mvc源代码项目并引用它.这有利于学习,但可能不建议用于商业应用.

  2. 从Microsoft Symbol服务器下载System.Web.Mvc的符号,更改您的设置以便能够调试框架源代码并适当地设置断点以逐步执行.

  • `“适当地设置一个断点”` 模型绑定器在哪里? (4认同)
  • 你想在MVC框架的`DefaultModelBinder`类'`public virtual object BindModel(ControllerContext controllerContext,ModelBindingContext bindingContext)`方法上设置断点 (2认同)

Flo*_*res 10

在我的案例中,查看ModelStatecontroller方法中的属性可以提供模型绑定失败的答案。

在此处输入图片说明

  • 看起来这是特定于 ASP.NET Core (2认同)