RedirectToAction不会更改URL

时间:2012-01-16 20:40:50

标签: c# asp.net-mvc asp.net-mvc-3 redirect

1。 我有一个主页(主页/索引)。在这里您选择语言。 这里的网址是:"localhost:xxxx".

2。 选择语言后,以下是登录页面(帐户/索引) 这里的网址是:"localhost:xxxx/Account/Index?language=en-US".

3。 输入数据(用户名/密码)并单击登录按钮时,重定向到用户/索引,但网址保留在帐户/登录

我的表格:

<% using (Html.BeginForm("LogOn", "Account")) { %>
<div data-role="fieldcontain" class="ui-hide-label">
  <label for="username">Username:</label>
  <%: Html.TextBoxFor(m => m.Username, new { placeholder = "Username" })%>                      
</div>
<div data-role="fieldcontain" class="ui-hide-label">
  <label for="password">Password:</label>
  <%: Html.PasswordFor(m => m.Password, new { placeholder = "Password" })%>                 
</div>
<fieldset class="ui-grid-a">
  <div class="ui-block-a"><button type="reset" data-theme="d">Reset</button></div>
  <div class="ui-block-b"><button type="submit" data-theme="b">Log On</button></div>
</fieldset>             
<% } %>

帐户管理员:

[HandleError]
public class AccountController : Controller
{        
  public ActionResult Index(string language = "es-Es")
  {
    return View();
  }

  [HttpPost]
  public ActionResult LogOn(UserModel user)
  {
    FormsAuthentication.SetAuthCookie(user.Username, false);
    return RedirectToAction("Index", "User");
  }

  public ActionResult LogOff()
  {
    return View();
  }
}

的Global.asax:

public static void RegisterRoutes(RouteCollection routes)
{
  routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
  routes.MapRoute(
                  "Default", // Route name
                  "{controller}/{action}/{id}", // URL with parameters
                 new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
                 );
}

如何制作网址:localhost:xxxx / User / Index?

4 个答案:

答案 0 :(得分:5)

Account/Index.cshtml视图中,替换:

@using (Html.BeginForm())
{
    ...
}

使用:

@using (Html.BeginForm("LogOn", "Account"))
{
    ...
}

以便在提交表单时调用帐户控制器上的LogOn操作,而不是索引操作(只返回相同的视图)。

答案 1 :(得分:4)

在LogOn中使用永久重定向:

[HttpPost]
public ActionResult LogOn(UserModel user)
{
   FormsAuthentication.SetAuthCookie(user.Username, false);
   return RedirectToActionPermanent("Index", "User");
}

答案 2 :(得分:0)

我知道这个问题已经得到了解答,但如果你使用RedirectToRoute而不是RedirectToAction会更容易,但事实证明RedirectToRoute会强制更改网址。

答案 3 :(得分:0)

如果您使用jQuery mobile,请确保将data-url属性设置为目标网页上的正确网址:

<div id="my-page" data-role="page" data-url="/myurl">

这解决了这个问题。