Привязка модели по умолчанию принимает параметры формы по имени и сопоставляет их со свойствами типа, указанного в списке аргументов. Например, ваша модель имеет свойства «Цена» и «Имя», тогда форма должна содержать входные данные с идентификаторами / именами «Цена» и «Имя» (я подозреваю, что сопоставление выполняется без учета регистра). Привязка использует отражение, чтобы преобразовать значения формы, связанные с этими ключами, в соответствующий тип и назначить его свойствам вновь созданного объекта типа, указанного параметром (снова полученного путем отражения).
На самом деле вы можете посмотреть (и загрузить) источник для этого по адресу http://www.codeplex.com/aspnet,, хотя оттуда вам придется углубиться в источник MVC. Я бы дал ссылку на источник DefaultModelBinder, но, как они построены, я считаю, что ссылка меняется по мере внесения изменений.
Итак, чтобы ответить на ваш вопрос, вам нужно иметь в форме параметры (которые могут быть скрыты), соответствующие свойствам объекта, который вы хотите воссоздать. Когда вы отправляете форму (в представлении) в контроллер, связыватель должен воссоздать объект указанного типа, используя параметры формы. Если вам нужно выполнить перевод значений в параметре формы в свойства объекта, вам, вероятно, потребуется реализовать собственный настраиваемый механизм связывания модели.
[РЕДАКТИРОВАТЬ] В ответ на ваше второе сообщение:
Допустим, мы хотим получить ссылку на действие, которое использует настроенный объект. Мы можем сохранить настроенный объект в TempData (или в сеансе, если нам нужно, чтобы он длился более чем через одну обратную передачу) с определенным ключом. Затем мы можем создать ссылку действия и предоставить ключ объекта в качестве значения для ActionLink в анонимном классе. Это вернет ключ в качестве параметра запроса. В нашем действии мы можем использовать ключ из этого параметра для извлечения объекта из TempData.
<%= Html.ActionLink( ViewData["CustomObject1",
"Select",
new { TempDataKey = ViewData["CustomObject1_Key"] }
) %>
public ActionResult Select()
{
Entity custObj = null;
string objKey = Request.Params["TempDataKey"];
if (!string.IsNullOrEmpty(objKey))
{
custObj = (Entity)TempData[objKey];
}
... continue processing
}