【问题标题】:asp.net mvc3 RouteToAction() not taking me anywhereasp.net mvc3 RouteToAction() 没有带我去任何地方
【发布时间】:2011-08-30 08:03:00
【问题描述】:

我正在使用 jquerymobile 和 asp.net MVC3 剃须刀。我对此有点陌生,但弄清楚了,我有一个非常基本的路由表,只有 .axd 资源的忽略路由和默认路由:

routes.MapRoute(
 "Default",
 "{controller}/{action}/{id}",
 new { controller = "Home", action = "Index", id = "", UrlParameter.Optional }
);

我有一个可在 .ascx 页面中使用的操作链接:

@Html.ActionLink("Log On", "LogOn", "Account", null, new { @class = "ui-btn-right" })

现在,当我到达登录页面并完成帐户验证时,我需要将它们发送到主页/Home/Home,如果我在地址栏中键入它就可以了,但我似乎无法让我的重定向在帐户控制器中工作:return RedirectToAction("Home", "Home");

感谢您的帮助!

【问题讨论】:

  • 我正在努力解决确切的问题,您找到解决方案了吗,请回答您的问题。我正在使用与您相同的技术。
  • @Sutikshan Dubey - 不,我没有,我会悬赏它,看看是否有人可以帮忙:)
  • 首先,我不知道这是否有助于解决您的问题,所以我将其作为评论而不是答案,但您的默认路线设置有点奇怪。 id = "",UrlParameter.Optional 应该是:id = UrlParameter.Optional

标签: asp.net-mvc-3 redirect routing


【解决方案1】:

听起来您可能是通过 ajax 从 /Account/LogOn 发布表单。这意味着当您return RedirectToAction("Home", "Home"); 时,页面不会改变。所以你只需要在表单提交上不使用 ajax。如果我的猜测是错误的,请发布更多代码,以便我们了解问题所在。

从文档中可以看出,jQuery mobile 通过 ajax 自动处理表单帖子。为防止这种情况,请将data-ajax="false" 属性添加到表单元素。此处的文档:http://jquerymobile.com/test/docs/forms/forms-sample.html

【讨论】:

  • 我正在使用 JqueryMobile,所以是的,我很确定它在做一个 ajax 帖子。有没有使用 JqueryMobile 解决此问题的好方法?
  • 是的,他们就是这样做的,通过 ajax 发布然后替换页面。如果我想继续沿着这条路线走,而不是禁用 ajax,有没有一种好的方法可以代替“RedirectToAction()”?
  • 不,对于您的服务器而言,您的客户端在做什么并不重要。但是,在一个完全 ajax 的站点中,我建议您在所有操作中仅使用 return PartialView()。然后,您可以通过这种方式将从服务器返回的 HTML 分派到页面的适当部分(仅刷新必要的部分,这似乎是这个 ajax 作为默认范例的意图)。
  • 但是如果用户从一开始就请求该页面,而不仅仅是从 Ajax 请求呢?他们不会得到一个完整的页面吗?
【解决方案2】:

鉴于documentation 中写的内容,您能否将代码放入表单元素并将其操作属性设置为 /Account/LogOn ?为此,您可能必须将 ActionLink 转换为按钮。

【讨论】:

    【解决方案3】:

    您可以在控制器中检查 ajax 请求:

    if(Request.IsAjaxRequest())
    {
      //send json object and do navigate in client
      return Json(new {IsLogged = true});
    }
    else
    { 
      //send redirect html code to browser
      return RedirectToAction("Home", "Home");
    }
    

    在客户端,如果您通过 jQuery ajax 发布表单,请检查 json 结果。 我没有使用 jquerymobile,所以我不知道它在客户端是如何工作的。

    【讨论】:

    • 但我希望 ajax 请求返回页面,因为 jQueryMobile 的客户端通过 ajax 获取新页面。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 2015-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多