지금까지이 :ASP.NET MVC에서 다중 액션 메소드로 포크하여 동일한 뷰로 돌아가는 가장 좋은 방법은 무엇입니까?
나는 각각의 이전에 따라 제출 그것에 여러을 제출 가진 페이지가 있습니다.
제출을 클릭 할 때마다 동일한 페이지가 렌더링됩니다.
저는 컨트롤러 메서드 (ViewModel을 기반으로하는 분기)에서 스파게티 코드를 작성하고 각 메서드에 대한 동작을 별도의 메서드로 분석하려고했습니다.
해결책을 구현했습니다. here - 특히 Maartin Balliauw의 기사를 바탕으로 mkozicki가 게시 한 솔루션입니다.
이것은 서로 다른 컨트롤러 방법을 포킹하는 데 적합합니다. 하지만 두 가지 문제가 발생했습니다.
- 매번 동일한보기로 돌아갑니다.
- 여기 코드는
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,:
는return View("SelectPlayer",new PlayerStatViewModel(...);
와 갈래 작업 방법에서 (이 SelectPlayer.cshtml)마다 표현되는 동일한 뷰를 강제하는 최적의 솔루션을 반환?- 보기에서 작업 메서드 이름을 하드 코딩하지 않아도되는 방법 (즉,
<form action="/PlayerStat/ChosenSeason" method="post">
) 가능한 경우@using (Html.BeginForm())
을 계속 사용하고 싶습니다. return 문에서 뷰 이름을 지정
좋습니다. 고마워, 그건 내가 옳은 길을 가도록 장려한다. – matskm