我的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
是否有其他替代方法,我可以在各个选项卡/窗口之间保留项目信息,因此在整个应用程序中每个用户,每个选项卡/窗口都可以轻松获得项目信息。