2014-10-20 3 views
0

접두사없이 URL 매개 변수에 모델을 바인딩하려면 어떻게해야합니까? 모델에 예를 들어MVC 개체에 대한 매개 변수 바인딩

:

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

은 그냥'Test' 방법'공공 ActionResult 테스트 (테스트 모델)에 매개 변수를 추가 {...' –

+0

이 매개 변수 필요가 없습니다 접두사가 "모델"입니까? –

+0

번호'DefaultModelBinder'는'Test'의 인스턴스를 생성 한 다음 이름이 속성 이름과 일치하는 쿼리 문자열 매개 변수를 찾습니다. –

답변

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 모델 바인더 이름 Value1Value2와 값, 예를 들어 요청 형태로보고, URL 것입니다. 발견되면 해당 값을 조치 메소드의 명명 된 매개 변수 Value1Value2에 복사합니다.

두 번째 예제에서 MVC 모델 바인더는 값을 찾는 것과 동일한 작업을 수행하지만 Test 개체의 속성 이름을 사용합니다. 귀하의 경우에는 Value1Value2이라는 속성이 있으므로 모델 바인더는 Test의 새 인스턴스를 만들고 public 속성 Value1Value2을 채 웁니다.

0

그냥 @ 제이슨의 대답에 추가 :

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(); 
    } 
} 
관련 문제