我有一个有价值的控制器。我想根据值重定向到另一个控制器的操作。我使用了一个简单的if结构,但我不确定这是最干净的方法。有没有更好的方法来解决这个问题?
我目前的代码如下。
// Get Search Results
[ValidateInput(false)]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Search(SearchViewModel searchViewModel)
{
var SelectedCategory = searchViewModel.SelectedCategory;
var SearchText = searchViewModel.SearchText;
if (SelectedCategory == 1)
{
return RedirectToAction("Artists", "Search");
}
else if (SelectedCategory == 2)
{
return RedirectToAction("Albums", "Search");
}
else
{
return RedirectToAction("Tracks", "Search");
}
}
答案 0 :(得分:2)
我相信我回答得太快了。无论如何,我认为Category
是一个枚举(如果不是它应该是),所以你可以添加这样的属性:
public enum Category {
[RelatedAction("Artists")]
Artists,
[RelatedAction("Albums")]
Albums,
[RelatedAction("Tracks")]
Tracks
}
然后在Search
方法中只有一行:
return RedirectToAction(searchViewModel.SelectedCategory.GetRelatedAction(), "Search");
答案 1 :(得分:2)
我认为没有比你已经提供的解决方案更好的解决方案。这里和那里只有小小的提示:
if ... else if ... else
的唯一目的是根据变量的值(就像在代码中那样)做不同的事情,最好使用switch语句。除此之外,我不认为你的代码有任何“坏”。
编辑顺便说一下,如果您正在寻找单行版本(但不太可读):
[ValidateInput(false)]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Search(SearchViewModel searchViewModel)
{
return RedirectToAction(searchViewModel.SelectedCategory == 1 ? "Artists" : searchViewModel.SelectedCategory == 2 ? "Albums" : "Tracks", "Search");
}
答案 2 :(得分:1)
您可以使用switch语句:
string action;
switch (selectedCategory)
{
case 1:
action = "Artists";
break;
case 2:
action = "Albums";
break;
default:
action = "Tracks";
break;
}
return RedirectToAction(action, "Search");