MVC将参数绑定到对象

时间:2014-10-20 11:35:46

标签: asp.net-mvc

如何在没有前缀的情况下将模型绑定到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();
    }
}

2 个答案:

答案 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,用于名称为Value1Value2的值。如果找到它们,则会将这些值复制到操作方法的命名参数Value1Value2

在第二个示例中,MVC模型绑定器将执行查找值的相同操作,但它将使用Test对象的属性名称。在您的情况下,您拥有名为Value1Value2的属性,因此模型绑定器将创建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();
    }
}