C# 重定向到基于变量的另一个操作
我有一个控制器,它有一个值。我想根据该值重定向到另一个控制器的操作。我使用了一个简单的if结构,但我不确定这是最干净的方法。有没有更好的办法来解决这个问题 我现在的代码如下C# 重定向到基于变量的另一个操作,c#,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,我有一个控制器,它有一个值。我想根据该值重定向到另一个控制器的操作。我使用了一个简单的if结构,但我不确定这是最干净的方法。有没有更好的办法来解决这个问题 我现在的代码如下 // Get Search Results [ValidateInput(false)] [AcceptVerbs(HttpVerbs.Post)] public ActionResult Search(SearchViewModel searchViewModel) { va
// 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");
}
}
我想我回答得太快了。无论如何,我假设
Category
是一个枚举(如果不是,也许应该是),因此可以添加如下属性:
public enum Category {
[RelatedAction("Artists")]
Artists,
[RelatedAction("Albums")]
Albums,
[RelatedAction("Tracks")]
Tracks
}
然后在Search
方法中只有一行:
return RedirectToAction(searchViewModel.SelectedCategory.GetRelatedAction(), "Search");
我想我回答得太快了。无论如何,我假设
Category
是一个枚举(如果不是,也许应该是),因此可以添加如下属性:
public enum Category {
[RelatedAction("Artists")]
Artists,
[RelatedAction("Albums")]
Albums,
[RelatedAction("Tracks")]
Tracks
}
然后在Search
方法中只有一行:
return RedirectToAction(searchViewModel.SelectedCategory.GetRelatedAction(), "Search");
我认为没有比你已经提供的更好的解决方案了。这里和那里只有一些小提示:
的唯一目的是。。。否则如果。。。else
是根据变量的值执行不同的操作(正如代码中所示),最好使用switch语句我认为没有比你已经提供的更好的解决方案了。这里和那里只有一些小提示:
的唯一目的是。。。否则如果。。。else
是根据变量的值执行不同的操作(正如代码中所示),最好使用switch语句您可以使用switch语句:
string action;
switch (selectedCategory)
{
case 1:
action = "Artists";
break;
case 2:
action = "Albums";
break;
default:
action = "Tracks";
break;
}
return RedirectToAction(action, "Search");
您可以使用switch语句:
string action;
switch (selectedCategory)
{
case 1:
action = "Artists";
break;
case 2:
action = "Albums";
break;
default:
action = "Tracks";
break;
}
return RedirectToAction(action, "Search");
你的问题更适合codereview.stackexchange.comI,我不知道这个网站存在!堆栈交换站点的出现速度超出了我的跟踪范围。同意。你的问题更适合codereview.stackexchange.comI,我不知道这个网站存在!堆栈交换站点的出现速度超出了我的跟踪范围。同意。建议转换声明+1。谢谢,这并不是因为代码不好,只是我觉得不“正确”。我很感激@davidbanbridge,我只是想不出任何其他“更好”的方法。当然,您可以去掉神奇的字符串,但这意味着定义新的变量(可能是枚举),这将使情况变得过于复杂。
action
和controller
在您的RedirectToAction()
@AdrianThompsonPhillips中是错误的。+1推荐了一个switch语句。谢谢,这并不是因为代码不好,只是我觉得不“正确”。我很感激@davidbanbridge,我只是想不出任何其他“更好”的方法。当然,你可以去掉神奇的字符串,但这意味着定义新的变量(可能是枚举),这将使情况变得过于复杂。action
和controller
在你的RedirectToAction()
@AdrianThompsonPhillips谢谢,修正了这个问题。action
和controller
在您的RedirectToAction()
@AdrianThompsonPhillips:当然,您是正确的,但想法仍然是一样的-易于维护,易于扩展。无论如何,谢谢你,我会解决的。@blez不用担心,这是一个有趣的解决方案。我只是觉得我应该提到它,以供其他MVC初学者阅读此答案时参考,以防他们看不出什么不起作用。action
和controller
在您的RedirectToAction()
@AdrianThompsonPhillips:当然,您是对的,但想法仍然是一样的——易于维护,易于扩展。无论如何,谢谢你,我会解决的。@blez不用担心,这是一个有趣的解决方案。我只是想提一下,以备其他MVC初学者阅读此答案时参考,以防万一他们看不出什么不起作用。