0

지금까지이 :ASP.NET MVC에서 다중 액션 메소드로 포크하여 동일한 뷰로 돌아가는 가장 좋은 방법은 무엇입니까?

  • 나는 각각의 이전에 따라 제출 그것에 여러을 제출 가진 페이지가 있습니다.

  • 제출을 클릭 할 때마다 동일한 페이지가 렌더링됩니다.

  • 저는 컨트롤러 메서드 (ViewModel을 기반으로하는 분기)에서 스파게티 코드를 작성하고 각 메서드에 대한 동작을 별도의 메서드로 분석하려고했습니다.

  • 해결책을 구현했습니다. here - 특히 Maartin Balliauw의 기사를 바탕으로 mkozicki가 게시 한 솔루션입니다.

  • 이것은 서로 다른 컨트롤러 방법을 포킹하는 데 적합합니다. 하지만 두 가지 문제가 발생했습니다.

    1. 매번 동일한보기로 돌아갑니다.
    2. 여기 코드는

View.cshtml의 액션 메소드 이름을 하드 배선 :

컨트롤러 : 여기

public class PlayerStatController : Controller 
{ 

    public class PlayerStatViewModel . . . //quite complex ViewModel 


    // HTTP GET 
    public ActionResult SelectPlayer() 
    { 
     List<string> idx_list = getSeasonIndex(); 
     return View(new PlayerStatViewModel(idx_list)); 
    } 


    // One of three forked action methods 
    [HttpPost] 
    [MultipleButton(Name = "action", Argument = "ChosenSeason")] 
    public ActionResult ChosenSeason(PlayerStatViewModel viewModel) 
    { 

     List<string> team_idx = getTeamNameIndex(viewModel.selected_seasonIndex); 


     return View("SelectPlayer",new PlayerStatViewModel(new List<string>(), team_idx, new List<string>(), 0)); 

    } 

뷰 (SelectPlayer에서 발췌. cshtml)

<form action="/PlayerStat/ChosenSeason" method="post"> 
    <fieldset> 
    <legend>Select Season</legend> 
    <div class="editor-field"> 
     @Html.LabelFor(m => m.selected_seasonIndex) 
     @Html.DropDownListFor(m => m.selected_seasonIndex, Model.seasonIndex_select_list) 
     @Html.ValidationMessageFor(m => m.selected_seasonIndex) 
    </div> 
    <p> 
     <input type="submit" value="Choose Season" name="action:ChosenSeason" /> 
    </p> 
    </fieldset> 
</form> 
따라서

15,:

  1. return View("SelectPlayer",new PlayerStatViewModel(...);와 갈래 작업 방법에서 (이 SelectPlayer.cshtml)마다 표현되는 동일한 뷰를 강제하는 최적의 솔루션을 반환?
  2. 보기에서 작업 메서드 이름을 하드 코딩하지 않아도되는 방법 (즉, <form action="/PlayerStat/ChosenSeason" method="post">) 가능한 경우 @using (Html.BeginForm())을 계속 사용하고 싶습니다. return 문에서 뷰 이름을 지정

답변

0
  1. 는 현재의 액션 메소드가 실행되고있는 다른 무언가를 명명 된 뷰를 반환하는 가장 좋은 가장 실용적인 방법이다. 나는 이것이 행동 방식을 하나의 관점에서 분리하기 위해서 설계된 것이라고 생각한다.

  2. 다시보기에서 양식을 현재 URL에 지정된 것과 다른 작업에 게시하려면 양식을 명시 적으로 지정해야합니다. BeginForm()이 비어 있으면 양식이 이전 요청에서 반환 된 것과 동일한 URL에 게시됩니다.

나는 문제를 해결하는 가장 좋은 방법이라고 생각하며 내 MVC 응용 프로그램을 구현하는 방법입니다. 특히 자연을 명시 적으로 나타내므로 논리를보고 보는 것이 중요합니다.서로 다른 제출 버튼을 서로 다른 작업 방법으로 구분하는 것은 확실한 접근 방법이며 본질적으로 각 제출 버튼에 대해 어떤 작업을 타겟팅 할 것인지 지정해야합니다. 이 접근법은 버튼 클릭 (모든 불쾌한 페이지 수명주기 빼기)을위한 Web Forms Server 사이드 이벤트 핸들러와 유사하다고 생각할 수 있습니다. 이 접근법은 우아하고 깨끗하며 제출에 해당하는 서버 측 코드 만 실행됩니다.

+0

좋습니다. 고마워, 그건 내가 옳은 길을 가도록 장려한다. – matskm

관련 문제