TryUpdateModel не работает - PullRequest
       1

TryUpdateModel не работает

0 голосов
/ 14 июля 2010

Я следую, хотя примеры в Professional ASP.Net MVC 2 и один из примеров не работают для меня.

[HttpPost]
public ActionResult Edit (int id, FormCollection collection)
{
    Dinner dinner = dinnerRepository.GetDinner(id);
    if (TryUpdateModel(dinner))
    {
        dinnerRepository.Save();
        return RedirectToAction("Details", new { id = dinner.DinnerID });
    }
    return View(new DinnerFormViewModel(dinner));
}

Я понимаю, что предполагается взять значения из FormCollection, а затем обновить им объект ужин, но я не вижу, чтобы на коллекцию ссылались нигде.

Спасибо за вашу помощь, я пытался выяснить это для прошлого дома.

Ответы [ 2 ]

1 голос
/ 14 июля 2010

Существует несколько перегрузок метода TryUpdateModel (). Используемый метод TryUpdateModel (модель TModel) пытается обновить объект модели, переданный из стандартного IValueProvider (который является экземпляром ValueProviderCollection, содержащим экземпляры FormValueProvider, RouteDataValueProvider, QueryStringValueProvider и HttpFileCollectionV). Тип FormCollection представляет собой NameValueCollection, который несет с собой собственный CustomModelBinderAttribute, который связывается только с данными формы (т. Е. Не с данными маршрута, строкой запроса и т. Д.). В настоящее время ваш метод ничего не делает с этой коллекцией.

Есть еще одна перегрузка TryUpdateModel (), которую вы можете передать в FormCollection (потому что FormCollection реализует IValueProvider) в качестве второго параметра, и он будет обновлять модель из данных формы (если бы там были какие-либо данные). Если ваш пример в настоящее время не работает, вероятно, что-то еще не так, например, данные не публикуются и т. Д. Любые данные формы также будут получены из стандартного IValueProvider, поэтому, если вы не получаете ожидаемые данные Передача в экземпляре FormCollection не поможет. Вы можете подумать о том, чтобы установить точку останова в начале метода действия и изучить коллекцию HttpContext.Request.Form, чтобы увидеть, в каких данных публикуется информация.

1 голос
/ 14 июля 2010

Для решения вашей проблемы collection нигде не упоминается.

TryUpdateModel - это метод базового Controller класса, который выполняет привязку модели. В этот процесс вовлечено довольно много, но в основном он анализирует значения запроса (строку запроса, переменные записи, куки и т. Д.) И сопоставляет их со свойствами объекта, переданного в TryUpdateModel.

Строго говоря, параметр FormCollection для метода действия не обязателен. TryUpdateModel должно работать без него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...