6

我有以下路线:

routes.MapRoute("Event Overview", "{city}/{type}/{id}",
                            new {city="LA", controller = "BaseEvent", action = "EventOverview"}, new {city = new CityConstraint()});

routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );

而且,我的网站上有几个链接:

@Html.ActionLink("Make", "EventOverview", "BaseEvent", new { id = eventInfo.Key.OID, type = eventInfo.Key.XPObjectType.TypeName.GetShortTypeName(), activeTab = "#scheduleLink", session = eventInfo.Key.EventSchedules[0].SessionId, hall = eventInfo.Key.EventSchedules[0].HallId, client = eventInfo.Key.EventSchedules[0].BasePlace.PremieraClientId}, null)

@Html.ActionLink("Make", "EventOverview", "BaseEvent", new { id = eventInfo.Key.OID, type = eventInfo.Key.XPObjectType.TypeName.GetShortTypeName(), activeTab = "#scheduleLink",  }, null)

这是`EventOverview 动作:

 public ActionResult EventOverview(int id, string type, string activeTab,string hall, string session, string client, string count)
        {
            var model = CreateEventViewData<EventViewData>(id, type);
            model.ActiveTab = activeTab;
            model.ScheduleCount = count;
            model.SessionId = session;
            model.HallId = hall;
            model.ClientId = client;
            return View("Controls/EventsInfo/EventInfo", model);
        }

在第一个链接中传递了许多参数,并且都显示在浏览器的地址字段中:
这是第一个链接:

http://localhost:62291/LA/Film/36?activeTab=%23scheduleLink&session=15&hall=65&client=2&count=1

这是第二个链接:

http://localhost:62291/LA/Film/36?activeTab=%23scheduleLink

我想要这样的东西:

http://localhost:62291/LA/Film/36

在地址行中隐藏参数的方法是什么?

更新:

$(document).ready(function () {
        var link = $(".btn_buy_ticket").find("a").click(function (e) {
            e.preventDefault();            
            $.post($(this).attr("href"));
        });
    })

[HttpPost]
        public ActionResult EventOverview(int id) // just for test
        {
            return RedirectToAction("EventOverview", new {id = id});
        }

        public ActionResult EventOverview(int id, string type, string activeTab,string hall, string session, string client, string count)
        {
            var model = CreateEventViewData<EventViewData>(id, type);
            model.ActiveTab = activeTab;
            model.ScheduleCount = count;
            model.SessionId = session;
            model.HallId = hall;
            model.ClientId = client;
            return View("Controls/EventsInfo/EventInfo", model);
        }

所有动作都被调用,但我的 EventInfo视图没有加载。

4

3 回答 3

5

您可以使用 POST 而不是 GET。因此,您可以将链接替换为包含您不想出现在查询字符串中的参数的隐藏字段的表单:

@using (Html.BeginForm("EventOverview", "BaseEvent", new { id = eventInfo.Key.OID, type = eventInfo.Key.XPObjectType.TypeName.GetShortTypeName() }, FormMethod.Post, null))
{
    @Html.Hidden("activeTab", "#scheduleLink")
    @Html.Hidden("session", eventInfo.Key.EventSchedules[0].SessionId)
    @Html.Hidden("hall", eventInfo.Key.EventSchedules[0].HallId)
    @Html.Hidden("client", eventInfo.Key.EventSchedules[0].BasePlace.PremieraClientId)
    <button type="submit">Make</button>
}
于 2012-04-19T05:57:44.753 回答
0

如何隐藏 URL 参数

如果要隐藏 URL 参数,请转到调试属性并选择radiobutton选项并指定 thatc 特定页面:

http://localhost:61757/TicketDataUpload/templateupload?projectid=6497&userid=7336

这是参数 URL。如果你想像这样隐藏:

http://localhost:61757/Controller/index

您必须放入特定页面,因为当您打开页面时,它不会显示 URL 参数。

于 2014-09-17T13:04:59.157 回答
0

我的(有点难看)解决方案:将代码保留原样,然后在加载 html 文档后(此时服务器已经使用了您的查询字符串数据),在 javascript 中使用history.pushState更改地址栏如下:

$(document).ready(function () {
    let hrefWithoutQueryString = window.location.href.split('?')[0];
    // args below are 'state' (irrelevant for me), 'title' (so far, 
    // ignored by most browsers) and 'url' (will appear in address bar)
    history.pushState({ }, '', hrefWithoutQueryString);
});

查询字符串会在一瞬间出现在地址栏中,但是在上面的 js 运行之后,包括“?”之后的所有内容 在您的网址中将消失。

显然,副作用是它会改变浏览器的会话历史,但这对我来说不是问题。

请注意,我已经将一个空状态传递给 pushState - 再次,这对我来说不是问题,但可能会导致问题,具体取决于应用程序的路由设置方式以及它是否使用状态变量。

于 2020-10-01T23:01:41.307 回答