我有一个名为ListView.aspx的ASP.Net页面,它显示一个记录列表。它使用jQueryUI来显示单个记录模式对话框的详细信息。模式对话框的内容是另一个名为DetailsView.aspx的asp.net页面。它是这样显示的:
function DisplayDetails(promoID) {
$("#promotionDetailsDialog").dialog({
height: 400,
width: 600,
modal: true
}).load("DetailsPage.aspx?ID=" + promoID);
return false;
}对话框中显示的DetailsView页面非常简单。
<body>
<form id="form1" runat="server">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<br />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
</form>
</body>DetailsView Button1_Click事件处理程序中的服务器端代码执行一个简单的数据库调用。我的问题是,在模式对话框上的按钮返回后,浏览器会从ListView重定向到DetailsView。有没有办法防止这种情况发生?
发布于 2011-04-28 19:48:29
问题是回发是页面的简单post。所以在这里我们有到DetailsPage.aspx的post,所以你自然会从那个页面得到响应。
TheSuperTrump是对的--最好的解决方案是通过ajax执行数据库调用。您可以为此创建一个sipmle web服务,稍后可以将其用于类似的问题,并将WebMethod属性应用于某些服务方法,以便通过ajax从js调用它。
[WebMethod(EnableSession = true)]
public string GetPromotionMessage(int employeeId)
{
return String.Format("Congratulation! You're promoted {0}", Employee.GetEmployeeByID(employeeId).FullName);
}然后在客户端js中调用它,就像这样。
ServiceNamespace.ServiceName.GetPromotionMessage(parseInt(employeeId), function (result) { ... }, function (exception) { alert(exception.get_message()); });这个属性将允许你在你的方法中使用会话变量(可能你需要这个来访问数据库-如果没有这个属性,当你试图访问会话时,将会引发一个运行时异常)
此函数
function (exception) { alert(exception.get_message()); }即使没有try-catch块,如果在您的服务方法中引发exeption,则将调用。
函数function (result) { ... }将在您收到服务方法响应后被调用。如果您的服务方法返回一些更复杂的数据,则结果将包含结构与您的服务方法返回类型相似的json数据。(它将包含可通过与服务器上相同的名称访问的公共属性。然而,如果数据太复杂,就会有一些复杂的问题)。
还有一种类似的方法来标记带有WebMethod属性的页面方法。
还有一种更简单的方法来修复它,使用asp:UpdatePanel并将Button1点击事件设置为它的异步回发触发器
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
...
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />
</Triggers>
</asp:UpdatePanel>它应该暂停完整的回发,并仅重新加载部分中的部分。!注意:更新面板需要页面上或母版页上的ScriptManager控件,否则会出现运行时异常。
如果您提供更多代码,我还可以展示ajax服务webMethod调用的示例,但我想您可以很容易地搜索到它。
但是imho,它看起来很简单,但更新面板往往不是最好的解决方案。我更喜欢使用服务/分页webMethod调用。
https://stackoverflow.com/questions/5342307
复制相似问题