如何在没有前缀的情况下将模型绑定到URL参数?
例如,使用模型:
class Test {
public string Value1 { get; set; }
public string Value2 { get; set; }
}
请求:
/test/test?value1=test&value2=test2
需要在控制器中输入哪些代码才能从URL填充测试?
class TestController : Controller {
public ActionResult Test() {
Test test = /* ?? bind parameters from URL */;
return View();
}
}
答案 0 :(得分:1)
您有两种选择:
public ActionResult Test(string Value1, string Value2) {
Test test = new Test();
test.Value1 = Value1;
test.Value2 = Value2;
return View(test);
}
public ActionResult Test(Test test)) {
return View(test);
}
在第一个示例中,MVC模型绑定器将在请求表单中查找,例如url,用于名称为Value1
和Value2
的值。如果找到它们,则会将这些值复制到操作方法的命名参数Value1
和Value2
。
在第二个示例中,MVC模型绑定器将执行查找值的相同操作,但它将使用Test
对象的属性名称。在您的情况下,您拥有名为Value1
和Value2
的属性,因此模型绑定器将创建Test
的新实例并填充其公共属性Value1
和{ {1}}对你而言。
答案 1 :(得分:0)
只是添加到@Jason回答:
class TestController : Controller {
public ActionResult Test(TestModel testModel) {
// Normally you'll populate Test from testModel with some mapping mechanism
// I am using Automapper as an example
Test test = Mapper.Map<TestModel, Test>(testModel);
...
return View();
}
}