【发布时间】:2012-01-04 21:22:35
【问题描述】:
我正在制作一个 web 应用程序,使用 ASP.NET、C# 和 jQuery,带有 4 个选项卡,第三个选项卡上有一个表单供用户填写。但是,每当用户提交表单数据时,它都会返回到第一个选项卡,我希望它转到第二个选项卡或停留在第三个选项卡上,具体取决于用户在表单中输入的内容。到目前为止,我可以让它工作的唯一方法是使用Response.redirect() 使用正确的锚标记(#tab-2 或#tab-3)重新加载页面,这将使页面显示正确的标记。但是,这样做会丢失表单中提交的所有数据,因此我还需要将所有表单数据放入查询字符串中,这似乎是一个糟糕的主意。
理想情况下,我想做的是将页面加载到正确的选项卡。
所以我目前有这个函数,它在用户单击按钮后被调用(我认为这会在服务器加载页面时被调用):
public virtual void editClicked (object sender, EventArgs args)
{
// Get the data
string primaryUser = Request.Form.Get (CompPrimUser.UniqueID);
string computerName = Request.Form.Get (compCompName.UniqueID);
// Data verification
if (computerName == "") {
// Bad data, reload third tab with user's entered data
// and inform them they need to fix it.
compeditId.Value = POSTED;
return;
}
// Store the Data, display second tab
}
compeditId 是一个隐藏字段,在该页面的 Page_Load() 调用中,它将根据发布的数据而不是空字段(或来自 mysql 数据库)正确填写表单。
我曾考虑调用Server.Transfer() 来加载具有正确锚标记的页面,但它只使用 .aspx 文件,而忽略了任何剩余的查询字符串。
最后,我直接使用 jquery 网站上的剪辑将查询字符串转换为正确的选项卡,即:
<script type="text/javascript">
$(function () {
$("a, intput:submit", ".toplevelnav").button();
$("a", ".toplevelnav").click(function () { return true; });
});
$(function () { $("#accordion").accordion({ header: "h3" }); });
$(function() { $( "#tabs" ).tabs(); });
</script>
并在 html 中列出实际的选项卡:
<div id="tabs" style=" font-size:14px;">
<ul>
<li><a href="#tabs-1">Clients Overview</a></li>
<li><a href="#tabs-2">Client Detail</a></li>
<li><a href="#tabs-3">Computers</a></li>
<li><a href="#tabs-4">Settings</a></li>
</ul>
<div id="tabs-1">
<cab:ClientList ID="clientList" runat="server" />
</div>
<div id="tabs-2">
<cab:ClientDetail ID="clientDetail" runat="server" />
</div>
<div id="tabs-3">
<cab:Computers ID="computers" runat="server" />
</div>
<div id="tabs-4">
</div>
</div>
那么,有没有人知道如何让服务器发送一个默认选择的选项卡,而不是基于查询字符串的选项卡?或者至少让服务器在不丢失表单中发布的数据的情况下更改查询字符串?
谢谢。
编辑:我还尝试使用 html 表单的 action 属性标记来告诉它提交到带有 #tab-3 锚点的 aspx 文件。但是,服务器忽略了这一点。此外,这样做的问题是,在数据发送到服务器之前,我们不知道是否需要第二个或第三个选项卡。
【问题讨论】:
-
为什么不直接进行 AJAX 提交呢?
-
为什么不将
#tab-2或#tab-3放在表单的action属性中? -
@Manthletics,因为我以前没听说过,我现在正在研究它,希望它会起作用......
-
@Frederic,我试过了,但它不起作用。服务器似乎忽略了 action 属性。
-
您可以在页面上创建一个隐藏控件,例如 HtmlHiddenInput(我认为这是类名)。将 jQuery 事件绑定到单击选项卡以将隐藏控件的值设置为选项卡的 ID。然后,您的隐藏输入将具有选项卡的 ID。然后,您可以根据隐藏输入的值设置活动选项卡,就像@FrédéricHamidi 建议的那样
标签: c# jquery asp.net jquery-ui .net-4.0