Ответ 1
Предположим, что у вас есть собственный тип, который вы хотите связать.
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
// other properties you need
}
Вы можете создать пользовательскую привязку модели для этого конкретного типа, наследуя от DefaultModelBinder
, для образца:
public class PersonModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var request = controllerContext.HttpContext.Request;
int id = Convert.ToInt32(request.QueryString["id"]);
string name = request.QueryString["name"];
int age = Convert.ToInt32(request.QueryString["age"]);
// other properties
return new Person { Id = id, Name = name, Age = age };
}
}
В Global.asax в событии Application_Start
вы можете связать эту модель с реестром для образца:
// for Person type, bind with the PersonModelBinder
ModelBinders.Binders.Add(typeof(Person), new PersonModelBinder());
В методе BindModel
из PersonModelBinder
убедитесь, что у вас есть все параметры в querystring и дайте им идеальное лечение.
Поскольку у вас есть этот метод действий:
public ActionResult Test(Person person)
{
// process...
}
Вы можете получить доступ к этому действию с URL-адресом примерно так:
Test?id=7&name=Niels&age=25