Рекомендации по отладке ASP.NET MVC Binding
Можете ли вы дать мне общие рекомендации о том, как отлаживать привязку 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
связаны правильно?
Ответы
Ответ 1
Как предложил Дарин, начните с проверки того, что отправляется от клиента на сервер, используя что-то вроде Firebug, Fiddler или другого прокси-сервера для веб-отладки.
В противном случае вы можете пройти через исходный код, чтобы узнать, что происходит во время привязки.
Два способа, которые я могу рекомендовать, это
Ответ 2
Хотя @russ answer полезен и иногда будет необходим, оба варианта кажутся немного низкими, когда основной вопрос больше касается общей картины. Поэтому я бы порекомендовал взглянуть.
Из его о странице:
& Hellip; Glimpse позволяет отлаживать ваш веб-сайт или веб-сервис прямо в браузере. Glimpse позволяет вам "взглянуть" на то, что происходит на вашем веб-сервере. Другими словами, что такое Firebug для отладки кода на стороне клиента, Glimpse - для отладки вашего сервера внутри клиента.
И поскольку вы специально задали вопрос о привязке данных, вам нужно обратиться к документации по вкладке привязки. Вы сможете увидеть снова из документов:
- Порядковый: порядок, в котором инфраструктура привязки модели MVC пыталась связать доступные данные
- Связыватель модели: Связыватель модели, который использовался в данном сценарии
- Свойство/Параметр: имя вещи, которую связыватель пытался связать
- Тип: тип вещи, которую связыватель пытался связать
- Поставщики попыток значения. Поставщики, которые связыватель пытался использовать для получения заданного значения (и было ли оно успешным)
- Попытка значения: фактическое значение, с которым должен работать поставщик (разговор по типу записи и т.д.)
- Культура: культура, которая использовалась для анализа необработанной ценности
Необработанное значение: необработанное значение, с которым должен работать поставщик (предварительный разговор и т.д.)
Смотрите краткий старт. Кратко:
- Установите glimpse.mvc3 пакет
- Перейдите к
http://yourhost/yourapp/Glimpse.axd
и "включите его".
- Нажмите на иконку в правом нижнем углу любого представления в вашем приложении для получения подробной информации.
Ответ 3
В моем случае, глядя на свойство ModelState
в методе контроллера, мы получили ответы, почему сбой привязки модели.
![enter image description here]()
Ответ 4
Хорошее место для начала - загрузить и установить FireBug и посмотреть, что будет отправлено с клиента на сервер. Затем вы увидите, что отсутствует, неверно,... Сообщения в блоге, такие как привязка к списку в списке, также хорошо читаются, чтобы познакомиться с соответствующий синтаксис, используемый в используемом по умолчанию образцом.
Ответ 5
Со стороны Visual Studio:
- Установите точку останова при входе в конечную точку.
- Откройте пункт "Немедленно" через меню "Отладка".
Введите ModelState.Keys.ToList()
- Это покажет ошибки привязки по имени/ключу.
А еще лучше введите ModelState.Values.ToList()...
![Model State Values display]()