C# 什么';从视图内部重定向到新url的理想方法是什么?

C# 什么';从视图内部重定向到新url的理想方法是什么?,c#,.net,asp.net-mvc,model-view-controller,C#,.net,Asp.net Mvc,Model View Controller,因此,在我的ASP.NETMVC视图中,我有一个条件语句将用户重定向到不同的页面 最好的方法是什么 视图的Controller.RedirectToAction()等价物是什么?您最好的选择可能是将条件移动到您的控制器并在那里执行重定向(这也使重定向逻辑易于测试)。或者,您可以使用视图的服务器端条件封装JavaScript语句,如下所示: <% if (viewShouldRedirect) { %> <script type="text/javascript">

因此,在我的ASP.NETMVC视图中,我有一个条件语句将用户重定向到不同的页面

最好的方法是什么


视图的
Controller.RedirectToAction()
等价物是什么?

您最好的选择可能是将条件移动到您的控制器并在那里执行重定向(这也使重定向逻辑易于测试)。或者,您可以使用视图的服务器端条件封装JavaScript语句,如下所示:

<% if (viewShouldRedirect) { %>
    <script type="text/javascript">
        window.location = "/Your/New/Url";
    </script>
<% } %>

window.location=“/Your/New/Url”;

最好的选择可能是将条件移动到控制器并在那里执行重定向(这也使得重定向逻辑易于测试)。或者,您可以使用视图的服务器端条件封装JavaScript语句,如下所示:

<% if (viewShouldRedirect) { %>
    <script type="text/javascript">
        window.location = "/Your/New/Url";
    </script>
<% } %>

window.location=“/Your/New/Url”;

这听起来像是对MVC的曲解,如果您不能在控制器中执行重定向,那么您的逻辑就不正确

但是,如果出于任何原因无法访问控制器,我将使用以下方法:

<meta http-equiv="refresh" content='0;url=<%=Html.Action("MyAction","MyController") %>'>

这听起来像是对MVC的曲解,如果您不能在控制器中执行重定向,那么您的逻辑就不正确

但是,如果出于任何原因无法访问控制器,我将使用以下方法:

<meta http-equiv="refresh" content='0;url=<%=Html.Action("MyAction","MyController") %>'>


是的,这会有用的。虽然如果用户禁用了JS(NoScript或wotnot),那么这将不起作用。+1用于将逻辑移动到控制器。如果你只是想重定向,甚至没有理由将视图呈现到浏览器。是的,JS不会飞,因为如果他们没有它,他们仍然可以进入,想法是在我的主页内进行角色检查。。。如果我在其他地方这样做,我将不得不在每个动作中编码。。。记住,从现在开始,他们都希望通过将检查/重定向放入母版页来获得一颗银弹。那么,这听起来像是ActionFilter的完美用途。您可以用它装饰您的所有操作,如果需要,它可以自动重定向。您是否签出了Authorize属性?是的,这会有用的。虽然如果用户禁用了JS(NoScript或wotnot),那么这将不起作用。+1用于将逻辑移动到控制器。如果你只是想重定向,甚至没有理由将视图呈现到浏览器。是的,JS不会飞,因为如果他们没有它,他们仍然可以进入,想法是在我的主页内进行角色检查。。。如果我在其他地方这样做,我将不得不在每个动作中编码。。。记住,从现在开始,他们都希望通过将检查/重定向放入母版页来获得一颗银弹。那么,这听起来像是ActionFilter的完美用途。您可以用它装饰您的所有操作,如果需要,它可以自动重定向。您是否签出了Authorize属性?这是一个角色检查的事情,我不想把它编码到每一个动作中,因为我可以在我的主页上完成它,然后用itOkay完成。好的,我已经更新了meta标记,它将显示一个Html.Action。这应该可以做你需要的所有事情。啊,所以我需要把它添加到视图中,我不能在视图中的任何地方做它?没有办法吗?我想HTML就是它,谢谢。我已经再次更新了评论,以反映您的需要。这将是一个更好的解决方案,但正如TimGThomas所提到的,actionfilters也是一个好主意/比我的好。@Ryan将逻辑放在你的观点中是对MVC的曲解,正如回答者所说。这是一个角色检查的事情,我不想把它编码到每一个动作中,因为我可以在我的母版页中完成,然后用itOkay完成。好的,我已经更新了meta标记,它将显示一个Html.Action。这应该可以做你需要的所有事情。啊,所以我需要把它添加到视图中,我不能在视图中的任何地方做它?没有办法吗?我想HTML就是它,谢谢。我已经再次更新了评论,以反映您的需要。这将是一个更好的解决方案,但正如TimGThomas所提到的,actionfilters也是一个好主意/比我的好。@Ryan将逻辑放在你的观点中是对MVC的曲解,正如回答者所说。