使用@ Html.ActionLink

时间:2018-08-09 07:06:18

标签: asp.net asp.net-mvc layout telerik persistence

我的kendo.combobox()页面上有一个Layout.cshtml控件,该页面是项目列表。

@(Html.Kendo().ComboBox()
                            .Name("projects")
                            .Placeholder("select project")
                            .DataTextField("Text")
                            .DataValueField("ID")
                            .HtmlAttributes(new { style = "width:45%;" })
                            .Filter("contains")
                            .SelectedIndex((int)Session["ProjectNoIndex"])
                            .DataSource(source =>
                            {
                                source.Read(read =>
                                {
                                    read.Action("GetProjectsList", "Home");
                                })
                                    .ServerFiltering(true);
                            })
                )

在使用menu创建的Layout.cshtml中也有一个@Html.ActionLinks(下面是一个示例)。

<li>@Html.ActionLink("Documents", "Search", "Document", new { projectNo = 1}, new {@id = "send"})</li>

“文档”控制器中的搜索操作以及应用程序中的大多数其他操作都需要projectNo参数(整个应用程序都基于用户的所选项目工作)。因此,我想将所选的ProjectNo保存在Session中,但是如果我这样做,那么即使用户在单个浏览器中的多个标签/窗口中打开应用程序,用户也只能使用1个项目(会话在标签/视窗)。

因此,我想到了使用querystrings传递所选的ProjectNo的方法。我在下面尝试过,除了用户右键单击并打开新选项卡中的链接外,其他方法都正常运行。在这种情况下,以下点击事件不会触发。

$('#send').click(function () {
        var x = $("#projects").data("kendoComboBox").selectedIndex;
        var url = '@Url.Action("Search", "Document", new { projectNoIndex = "-1" })'
        url = url.replace("-1", x);
        this.href = url;
    });

我也不想通过oncontextmenu = "return false;"选项限制用户。我在这里有什么选择? 问题1:如何确保我可以使用querystring传递所选的ProjectNo 问题2:Session是否有其他替代方法,我可以在各个选项卡/窗口之间保留项目信息,因此在整个应用程序中每个用户,每个选项卡/窗口都可以轻松获得项目信息。

0 个答案:

没有答案