2009-05-01 2 views
2

Допустим, у меня есть действие контроллера определяется как:ASP.NET MVC модель привязки и действия параметров

public ActionResult(MyModel model, string someParameter) 
{ 
    // do stuff 
} 

У меня есть пользовательские модели связующего для типа MyModel, и есть поле формы под названием «SomeParameter» в представлении, которое не связано с моделью. Как известно ASP.NET MVC значение Request.Form["SomeParameter"] в качестве значения аргумента «someParameter» для действия?

ответ

1

Поскольку связующее устройство по умолчанию будет использоваться для некоторого параметра, если вы не укажете иное. И привязка модели по умолчанию делает именно то, что вы описываете.

2

ASP.NET использует отражение для определения правильного метода для вызова и создания параметров для передачи. Это делается на основе массива FormCollection. В основном это увидит модель. * Keysin там и FormCollection["someParameter"] сначала попробует Action(model,someParameter), затем Action(model), а затем Action(). Поскольку он находит действие с аргументами модели и someParameter, он попытается преобразовать их в типы аргументов.

Однако по умолчанию он делает это слепо, что создает некоторые риски для безопасности, this blog post более подробно описывает это.

Если кто-то может опубликовать ссылку, которая более подробно описывает, как ModelBinding выполняется под капотом, было бы здорово.

1

У Phil Haack есть сообщение на How a Method becomes an Action, в котором объясняется, как это разрешение происходит.

+0

Умм, это не Phil Haack. Вы были Haack'd? – Sean

0

Один из самых простых способов оказывают Html элементы на странице с тем же именем в качестве входных параметров в методе действий. EX) В представлении мы имеем:

<input name="refNo" type="text"> 

Тогда в методе действий:

public ActionResult getOrders(string refNo) 

Таким образом, это просто связать значение «Код ссылки» в качестве входного параметра из «getOrders» действия ,

Смежные вопросы