TryUpdateModel против строго типизированного параметра метода - PullRequest
5 голосов
/ 03 октября 2011

В MVC2 я использовал для создания строго типизированных представлений таким образом, чтобы при публикации я никогда не использовал объект FormCollection. Мои подписи всегда выглядели так:

[AcceptVerbs(HttpVers.Post)] 
public Create(Person newPerson)
{ 
//code to update the person from the post
}

Но теперь я вижу этот новый способ TryUpdateModel, где я бы просто написал что-то вроде:

    [AcceptVerbs(HttpVers.Post)] 
    public Create()
    { 
        Person thePersonToCreate = new Person()
        TryUpdateModel(thePersonToCreate)
        {
            //Code to create the person if model is valid
        }    
    }

Так что теперь, похоже, мне нужно смоделировать HTTPContext, чтобы протестировать этот метод. Однако кажется, что я все еще могу использовать первый способ, используя строго типизированные методы. Я понимаю, что метод TryUpdateModel является улучшением для тех, кто хотел бы использовать метод FormCollection для ведения дел, но зачем беспокоиться о TryUpdateModel?

Ответы [ 2 ]

2 голосов
/ 03 октября 2011

Некоторые также используют этот метод, когда вам нужно сначала загрузить информацию в сущность и объединить ваши значения в целях проверки.Однако в этих случаях вы можете просто использовать automapper, но некоторые компании запрещают открытый исходный код.

Я бы сказал, что почти никто не использует FormCollection в хорошо спроектированном приложении.

2 голосов
/ 03 октября 2011

Есть случаи, когда это желательно. Хороший пример - когда ваша модель требует более сложной инициализации или фабричного метода для создания.

[AcceptVerbs(HttpVers.Post)] 
public Create()
{ 
    var dataAccess = new MyDataAccess("Another Param");
    Person thePersonToCreate = new Person(dataAccess);

    TryUpdateModel(thePersonToCreate)
    {
        //Code to create the person if model is valid
    }    
}

Теперь можно утверждать, что пользовательское ModelBinder является лучшим решением, но это может потребовать больше усилий, чем оно того стоит, если это одна ситуация. Кроме того, скрытие этой детали в ModelBinder затрудняет отладку ошибок.

Я уверен, что есть и другие ситуации, но это только быстрый пример.

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