jQuery与MVC4 Razor一致|保持活动窗格打开
我正在使用jQuery手风琴。在手风琴我有几个链接,使控制器的行动调用jQuery与MVC4 Razor一致|保持活动窗格打开,jquery,asp.net-mvc-4,razor,Jquery,Asp.net Mvc 4,Razor,我正在使用jQuery手风琴。在手风琴我有几个链接,使控制器的行动调用 <div id="accordion" class="accordion"> <h1 class="requestsheader"><a href="#1">Header 1</a></h1> <div> <table> @foreach (var item in Model)
<div id="accordion" class="accordion">
<h1 class="requestsheader"><a href="#1">Header 1</a></h1>
<div>
<table>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
<div class="requestButton">
@Html.ActionLink("Send Request for Authorization", "SendRequest", new { id = item.Id })
</div>
</td>
</tr>
}
</table>
</div>
<h1 class="requestsheader"><a href="#2">header 2</a></h1>
<div>
...
...
</div>
</div>
在我要求采取行动后,所有的窗格都会倒塌。我需要一种方法在调用操作后保持当前窗格打开。如果可以使用隐藏字段来实现这一点,那么在mvc中使用隐藏字段的正确方法是什么。您可以发布一个隐藏变量,其中包含您希望在post返回时激活的面板,将其添加到viewbag中,然后有条件地激活该面板 您必须显示您正在使用的表单,以便我对如何发布附加变量进行评论(不知道是否是ajax、表单、actionlink等),但以下是其余的内容:
public ActionResult MyPagingMethod(int page = 1, int? panel = null) // or whatever your action is
{
// do work
ViewBag.PanelToOpen = panel;
// return view
}
然后是javascript
$("#accordion").accordion({
collapsible: true, clearStyle: true, heightStyle: "content", navigation: true,active:false
})
@if(Viewbag.PanelToOpen != null) {
$('#accordion').accordion('activate', @ViewBag.PanelToOpen);
}
或者,(可能是有利的)您可以使用javascript为打开的accordion面板设置cookie,在页面加载时,如果设置了cookie,则激活该面板。这将打开的面板的客户端逻辑与服务器分离。我认为使用cookie是最好的方法。下面是我如何解决它的。希望这将有助于寻找类似解决方案的人 以下代码转到document.ready函数:
var activeIndex = parseInt(getCookie('openedPane'));
$("#accordion").accordion({
collapsible: true, clearStyle: true, heightStyle: "content", navigation: true, active: activeIndex,
activate: function (event, ui) {
var index = $(this).children('h1').index(ui.newHeader);
setCookie('openedPane', index, 1);
},
create: function (event, ui) {
deleteCookie('openedPane'); //Deleting the cookie when accordion is created
}
});
以下是在Javascript中设置/获取/删除cookie的代码:
function setCookie(name, value, days) {
if (days) {
var date = new Date();
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
var expires = "; expires=" + date.toGMTString();
}
else var expires = "";
document.cookie = name + "=" + value + expires + "; path=/";
}
function getCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') c = c.substring(1, c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
}
return null;
}
function deleteCookie(name) {
setCookie(name, "", -1);
}
函数setCookie(名称、值、天数){
如果(天){
变量日期=新日期();
date.setTime(date.getTime()+(天*24*60*60*1000));
var expires=“;expires=“+date.togmString();
}
else var expires=“”;
document.cookie=name+“=”+value+expires+“path=/”;
}
函数getCookie(名称){
变量nameEQ=name+“=”;
var ca=document.cookie.split(“;”);
对于(变量i=0;i
非常感谢
最后,我的代码是这样的。它与活动的手风琴窗格一起工作
$(function () {
$("#accordion").accordion({
collapsible: true
clearStyle: true,
heightStyle: "content",
navigation: true,
active: false
});
});
它无法在
httppost
中打开accordion
。你能详细解释一下为什么要在post中打开accordion
。不仅仅是post,假设我的accordion中有带分页的网格,窗格在从一页移动到另一页时会折叠。
$(function () {
$("#accordion").accordion({
collapsible: true
clearStyle: true,
heightStyle: "content",
navigation: true,
active: false
});
});