2013-06-14 4 views
0

나는이 컨트롤러를 가지고ASP.NET MVC 3 - 전달 변수 모델은 컨트롤러에

public class DownloadController : Controller 
{ 
    [HttpPost] 
    public FileContentResult GetFile(MyModel model) 
    { 
     // Action code 
    } 
} 

그리고 컨트롤러에보기에서 모델을 전달

public class MyModel 
{ 
    public string Test { get; set; } 
} 

처럼 잘 작동이 모델
@using (Html.BeginForm("GetFile", "Download", FormMethod.Post)) 
{ 
    @Html.HiddenFor(m => m.Test) 
    <button type="submit" name="submit" class="submit">Download</button> 
} 

모델이 컨트롤러에 올바르게 전달되어 있으며이를 수행해야합니다.() 컨트롤러 액션이 일반적인

지금, 내가 달성하기 위해 노력하고있어하면이 GETFILE을 만드는 것입니다, 그래서 나는 강하게 메소드 서명에서 모델 클래스를 입력 할 필요없이 어떤 모델을 전달할 수 위의 예에서와 같이.

내가 가지고있는 각 모델에 대해 한 번 GetFile() 메서드를 재정 의하여이 작업을 수행 할 수 있음을 알고 있지만 가능한 한 많은 작업을 유지하기 위해 더 나은 방법이 있는지 궁금합니다.

감사합니다.

답변

1

나는 기본 클래스를 사용하는 것이 좋습니다 것 :

public class BaseGetFileModel {}

다양한되는 모델에서 파생됩니다.

[HttpPost] 
public FileContentResult GetFile(BaseGetFileModel model) 

편집 : 당신이이 일을 일반적인 방법을 원하는 경우

확인, 다음, 당신이 할 수 있습니다 :

[HttpPost] 
public FileContentResult GetFile() 
{ 
    var someValue = Request["SomeValue"]; 
} 

당신은 어떤 모델 매개 변수를 허용하지 않습니다, 당신은 단순히 선택 요청에서 POST까지의 값을 반환합니다. 또는 키 이름을 하드 코딩하지 않으려면 요청 값 컬렉션을 반복 할 수 있습니다.

+0

이 경우 BaseGetFileModel을 내 메서드에 전달하면 BaseGetFileModel의 멤버 만 표시되고 파생 클래스에 추가 된 다른 멤버는 표시되지 않으므로이 솔루션이 작동하지 않습니다. – dizarter

관련 문제