至今:
我有一个页面,上面有多个提交,每个提交都取决于前一个。
每次单击提交时都会呈现相同的页面。
我发现自己在控制器方法(基于 ViewModel 的分支)中编写意大利面条代码,并希望将每个提交的行为分解为一个单独的方法。
我实施了此处找到的解决方案——特别是 mkozicki 根据 Maartin Balliauw 的文章发布的解决方案。
这对于分叉到不同的控制器方法非常有效。但是我遇到了两个问题:
- 每次返回相同的视图。
- 在 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>
因此:
- 从分叉操作方法返回是否具有
return View("SelectPlayer",new PlayerStatViewModel(...);
强制每次呈现相同视图(SelectPlayer.cshtml)的最佳解决方案? - 有没有办法避免在视图中硬编码操作方法名称(即,如果可能的话,
<form action="/PlayerStat/ChosenSeason" method="post">
我想继续使用)@using (Html.BeginForm())
。