为什么#字符被添加到网址?

时间:2012-09-07 09:16:02

标签: c# .net asp.net-mvc asp.net-mvc-4 actionlink

我有一个显示缩略图列表的简单页面,

我想添加一个寻呼机,我添加了两个动作链接

  <li class="ui-pagination-next">@Html.ActionLink("Next", "Paginate", "Home", new { nbSkip = ViewBag.nextSkip }, null)</li>

当我点击链接时,我被重定向到

http://localhost:41626/#/Home/Paginate?nbSkip=60

而不是

http://localhost:41626/Home/Paginate?nbSkip=60 , 

有谁知道为什么'#'字符被添加到网址?

路线copnfig:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

4 个答案:

答案 0 :(得分:4)

通过查看您的代码,我可以找到ui-pagination-next
这可能意味着其他一些JS框架实际上正在侦听此链接的click事件并执行某种ajax 正在使用散列"#"字符,以便实际浏览器不会重定向到页面,同时保持历史记录
因此,如果按下浏览器后退按钮,#之后链接的这个附加部分将被删除,任何订阅了evet的JS框架都知道如何处理它然后

更简单。
#中的url未发送到服务器后的任何内容。因为一些JS框架正在处理ajax部分,所以它不希望该请求应该直接转到服务器,同时在浏览器地址栏中显示正确的内容,因此在#之后添加你在链接中的所有内容并继续用AJAX

heres使用哈希进行后退和前进的深入文章

答案 1 :(得分:2)

通过查看li ui-pagination-next $.mobile.ajaxLinksEnabled = false; 类,我们将使用jQuery Mobile。

jQuery Mobile默认情况下为im assuming


如果您愿意,可以使用以下方法来防止这种情况:

<script type="text/javascript">
   $(function(){
       $.mobile.ajaxLinksEnabled = false; 
   });
</script>

{{1}}

答案 2 :(得分:0)

如果我是你,我会使用Ajax Raw ActionLink:

@Ajax.RawActionLink("NameofLink", "Action", "Controller", new { oid = 0, type = "oid and type are 2 parameters you want to send to action " }, new { id = "btnNewB", @class = "anyclass" })

答案 3 :(得分:0)

谢谢大家的回复,

很好看@curt,事实上我正在使用jQuery mobile,导致问题的是mobile.changePage

现在我使用简单的按钮来导航投掷页面,但是

$.mobile.ajaxLinksEnabled = false; 

无法使用ajax链接解决我的问题。所以我已经完成了这项工作,现在正在运作

 @Html.ActionLink("Previous", "Index", new { nbSkip = ViewBag.previousSkip }, new { data_role = "button", data_icon = "arrow-l", rel = "external", data_ajax = false })

感谢@Parv Sharma的解释