首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >服务器端ASP.net代码导致从jQueryUI模式对话框内部进行完整回发

问服务器端ASP.net代码导致从jQueryUI模式对话框内部进行完整回发
EN

Stack Overflow用户
提问于 2011-03-18 00:43:56
回答 1查看 923关注 0票数 1

我有一个名为ListView.aspx的ASP.Net页面,它显示一个记录列表。它使用jQueryUI来显示单个记录模式对话框的详细信息。模式对话框的内容是另一个名为DetailsView.aspx的asp.net页面。它是这样显示的:

代码语言:javascript
复制
function DisplayDetails(promoID) {

            $("#promotionDetailsDialog").dialog({
                height: 400,
                width: 600,
                modal: true
            }).load("DetailsPage.aspx?ID=" + promoID);

            return false;
        }

对话框中显示的DetailsView页面非常简单。

代码语言:javascript
复制
<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。有没有办法防止这种情况发生?

EN

回答 1

Stack Overflow用户

发布于 2011-04-28 19:48:29

问题是回发是页面的简单post。所以在这里我们有到DetailsPage.aspx的post,所以你自然会从那个页面得到响应。

TheSuperTrump是对的--最好的解决方案是通过ajax执行数据库调用。您可以为此创建一个sipmle web服务,稍后可以将其用于类似的问题,并将WebMethod属性应用于某些服务方法,以便通过ajax从js调用它。

代码语言:javascript
复制
[WebMethod(EnableSession = true)]
public string GetPromotionMessage(int employeeId)
{
    return String.Format("Congratulation! You're promoted {0}", Employee.GetEmployeeByID(employeeId).FullName);
}

然后在客户端js中调用它,就像这样。

代码语言:javascript
复制
ServiceNamespace.ServiceName.GetPromotionMessage(parseInt(employeeId), function (result) { ... }, function (exception) { alert(exception.get_message()); });

这个属性将允许你在你的方法中使用会话变量(可能你需要这个来访问数据库-如果没有这个属性,当你试图访问会话时,将会引发一个运行时异常)

此函数

代码语言:javascript
复制
function (exception) { alert(exception.get_message()); }

即使没有try-catch块,如果在您的服务方法中引发exeption,则将调用。

函数function (result) { ... }将在您收到服务方法响应后被调用。如果您的服务方法返回一些更复杂的数据,则结果将包含结构与您的服务方法返回类型相似的json数据。(它将包含可通过与服务器上相同的名称访问的公共属性。然而,如果数据太复杂,就会有一些复杂的问题)。

还有一种类似的方法来标记带有WebMethod属性的页面方法。

还有一种更简单的方法来修复它,使用asp:UpdatePanel并将Button1点击事件设置为它的异步回发触发器

代码语言:javascript
复制
<asp:UpdatePanel ID="UpdatePanel1" runat="server">

  <ContentTemplate>
  ...
  </ContentTemplate>

  <Triggers>
    <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />
  </Triggers>

</asp:UpdatePanel>

它应该暂停完整的回发,并仅重新加载部分中的部分。!注意:更新面板需要页面上或母版页上的ScriptManager控件,否则会出现运行时异常。

如果您提供更多代码,我还可以展示ajax服务webMethod调用的示例,但我想您可以很容易地搜索到它。

但是imho,它看起来很简单,但更新面板往往不是最好的解决方案。我更喜欢使用服务/分页webMethod调用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5342307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档