2011-01-10 3 views
37

Можете ли вы дать мне общие рекомендации о том, как отлаживать привязку ASP.NET MVC?Рекомендации по отладке привязки ASP.NET MVC

Когда все работает должным образом, ASP.NET MVC отлично работает. Но если что-то не так, как будто что-то не связано по какой-то неизвестной причине, мне сложно отследить проблему и найти, что я трачу часы, отслеживая, казалось бы, простую проблему.

Давайте представим вам землю в методе контроллера, как это:

[HttpPost] 
public ActionResult ShipmentDetails(Order order) 
{ 
    //do stuff 
} 

Давайте далее представим, что класс заказа выглядит следующим образом:

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?

ответ

20

Как Дарин предположил, начните с проверки того, что отправляется от клиента на сервер, используя что-то вроде Firebug, Fiddler или другого прокси-сервера отладки.

В противном случае вы можете пройти через исходный код, чтобы узнать, что происходит во время привязки.

Два способа, которые я могу рекомендовать сделать это в

  1. Include the System.Web.Mvc source code project in your application and reference this. Это полезно для обучения, но, возможно, не рекомендуется для коммерческого применения.

  2. Скачать символы для System.Web.Mvc с серверов Microsoft Symbol, изменить настройки, чтобы иметь возможность debug framework source code and set a break point appropriately to step through.

+0

'' надлежащим образом установить точку разрыва ''Где это для связующего для модели? – StuperUser

+2

Вы хотите установить точку останова в объекте MVC-класса 'DefaultModelBinder' 'public virtual object BindModel (ControllerContext controllerContext, ModelBindingContext bindingContext)' method –

+1

После включения/выгрузки символов, как вы можете добраться до источника для ' DefaultModelBinder', чтобы установить точку останова? –

3

Хорошее место для начала - загрузить и установить FireBug и посмотреть, что будет отправлено от клиента на сервер. Затем вы увидите, что не хватает, неверно, ... Сообщения в блоге, такие как Model Binding to a List, также хорошо читаются, чтобы познакомиться с правильным синтаксисом, который использует связующее устройство по умолчанию.

+0

Но это не говорит вам, что связывает mvc с данными ... есть ли способ отслеживать процесс привязки модели? – Dani

+0

@ Дани, что вы хотите знать о привязке модели? Это довольно сложно: поле ввода с именем 'Customer.Name' будет связываться с свойством' Name' сложного свойства 'Customer' модели. В этом нет ничего особенного. И как только вы получите концепцию списков и коллекций, вы знаете все, что нужно знать о том, как работает привязка модели. Когда это не FireBug покажет вам запрос, и вы сразу узнаете, почему свойство не было связано: это потому, что либо он отсутствует в запросе, либо имеет недопустимое имя, либо неверный формат. –

+0

Я предполагаю, что мне не хватает коллекции и списков, и что делать с новыми элементами. образцы, которые я использовал до сих пор, добавляют строки в сетку со случайным идентификатором, и ничто не ограничивает мой код, я видел один пример, который пытается повторить номер, но оригинальный пример (steve Sandersen) работает без него ... .. – Dani

23

Хотя @russ's answer полезно и иногда будет необходимо, оба варианта кажутся немного низкий уровень, когда главный вопрос больше о большой картине. Таким образом, я бы рекомендовал Glimpse.

С его о странице:

& hellip; Glimpse позволяет вам отлаживать ваш веб-сайт или веб-службу прямо в браузере. Glimpse позволяет вам «заглянуть» в то, что происходит на вашем веб-сервере. Другими словами, что Firebug должен отлаживать ваш код на стороне клиента, Glimpse - это отладка вашего сервера внутри клиента.

И поскольку вы специально задали вопрос о привязке данных, вам нужно посмотреть на binding tab documentation.Вы сможете увидеть, снова из документации:

  1. Порядковый: Порядок, в котором Binding инфраструктура MVC модель пыталась связать имеющиеся данные
  2. Model Binder: Модель Binder, которая была использована в данном сценарии
  3. Свойство/Параметр: Название вещи, что Binder пытался связать
  4. Тип: Тип вещи, что Связующее пытаясь связать
  5. Покушения Поставщиков Значения: Провайдеры, что Binder пытались использовать, чтобы получить заданное значение (и было ли оно успешным)
  6. Покушения Значение: Фактическое значение, что поставщик должен работать с (пост типа разговор и т.д.)
  7. культуры: Культура, которая была использована для анализа необработанного значения Raw Value: Исходное значение, что поставщик должен работать с (предварительно типа разговора и т.д.)

См. quick start. Кратко:

  1. Установите glimpse.mvc3 пакет
  2. Перейти к http://yourhost/yourapp/Glimpse.axd и "включить его."
  3. Нажмите на значок поиска в правом нижнем углу любого вида в приложении для получения более подробной информации.
+0

Очень полезный ответ, спасибо! – nrodic