【问题标题】:Page load twice in asp.net在 asp.net 中页面加载两次
【发布时间】:2014-12-20 00:50:20
【问题描述】:

我的 Page_Load 在任何对该页面的调用中都会点击两次。

我在 jqgrid 中使用 trirand dll。当我刷新页面时,它会调用 page_load 两次。没有 src 为空白的图像标签或写入了注意处理程序。

请帮忙 ASPX 页面

<%@ Page Title="" Language="C#" MasterPageFile="~/app_assets/main.master" AutoEventWireup="true" CodeBehind="default.aspx.cs" Inherits="RM_Admin.rm_app_infrastructure.business_rules._default" %>

<%@ Register Assembly="Trirand.Web" TagPrefix="trirand" Namespace="Trirand.Web.UI.WebControls" %>

<asp:Content ID="Content1" ContentPlaceHolderID="cph_main_head_1" runat="server">

<link href="../../app_assets/js/jquery/plugins/colorbox/colorbox.css" rel="stylesheet" type="text/css" />
<script src="../../app_assets/js/jquery/plugins/colorbox/jquery.colorbox.js" type="text/javascript"></script>

<link href="../rm_app.css" rel="stylesheet" type="text/css" />
<script src="../rm_app.js" type="text/javascript"></script>

</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="cph_main_body_1" runat="server">
<form id="Form1" runat="server">
    <div id="page_content" class="page_content">

        <input id="btnCreateRule" type="button" value="Create Business Rule" />
        <asp:DropDownList ID="ddlst_tags" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlst_tags_SelectedIndexChanged"></asp:DropDownList>
        <br />
        <br />

        <trirand:JQGrid runat="server" ID="grdRelease" Width="900px" Height="360" OnSearching="grdRelease_Searching">
            <Columns>
                <trirand:JQGridColumn
                    Searchable="false"
                    TextAlign="Center"
                    Width="40"
                    Sortable="false"
                    CssClass="EditImage" />

                <trirand:JQGridColumn
                    HeaderText="Business Rule"
                    DataField="business_rule_id"
                    DataType="Int"
                    Searchable="true"
                    SearchToolBarOperation="Contains"
                    TextAlign="Center"
                    Width="150" />

                <trirand:JQGridColumn
                    HeaderText="Rule Name"
                    DataField="rule_name"
                    DataType="String"
                    Searchable="true"
                    SearchToolBarOperation="Contains"
                    CssClass="divDescription"
                    Width="300" />


                <trirand:JQGridColumn
                    HeaderText="Rule description"
                    DataField="rule_description"
                    TextAlign="Left"
                    DataType="String"
                    Searchable="true"
                    SearchToolBarOperation="Contains"
                    CssClass="divDescription"
                    Width="400" />

                <trirand:JQGridColumn
                    HeaderText="Created Date"
                    DataField="create_date"
                    Searchable="true"
                    SearchToolBarOperation="Contains"
                    DataType="DateTime"
                    TextAlign="Center" />

            </Columns>
            <ToolBarSettings ShowSearchToolBar="true" />
            <PagerSettings PageSize="50" PageSizeOptions="[50]" />
        </trirand:JQGrid>

        <div id="divShowContent" class="ActionPopupContent" style="display: none;"></div>

    </div>
</form>

服务器端代码。

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            bind_tag_dropdown();
            BindBusinessRuleGrid(0);
        }
    }

public void BindBusinessRuleGrid(int n_tag_id)
    {
        obj_dt = obj_document.GetBusinessRules(n_tag_id);

        foreach (DataRow dr in obj_dt.Rows) // search whole table
        {
            dr["rule_description"] = Regex.Replace(dr["rule_description"].ToString(), "<.*?>", string.Empty).Replace("\r\n", string.Empty); //remove all the html tag and new line command
            dr["rule_name"] = Regex.Replace(dr["rule_name"].ToString(), "<.*?>", string.Empty).Replace("\r\n", string.Empty);//remove all the html tag and new line command
        }

        grdRelease.DataSource = obj_dt;
        grdRelease.DataBind();
    }

protected void bind_tag_dropdown()
    {
        ddlst_tags.DataSource = Tools.retrieve_tags();
        ddlst_tags.DataTextField = "tag_title";
        ddlst_tags.DataValueField = "tag_id";
        ddlst_tags.DataBind();
    }

【问题讨论】:

  • 在这两种情况下 Page.IsPostBack 是否为假?还是第二个实际上是回发?
  • 第二个调用是回发吗?还有bind_tag_dropdown()BindBusinessRuleGrid() 是做什么的?
  • 设置断点,第一次点击页面查看调用栈,第二次点击页面查看调用栈,你会发现为什么你的页面被执行了两次!学习使用调试功能!
  • 如何检查调用堆栈@mybirthname
  • @Esko 两种情况下 IsPostBack 都是 false :(

标签: c# asp.net jqgrid pageload


【解决方案1】:

网格本身会自动返回到 它托管的页面以加载数据。本质上,页面优先 加载(Page_Load 执行一次),然后在加载页面后, 网格向服务器发出 GET 请求以获取其数据(因此 PostBack = False 的第二个请求)。

http://www.trirand.net/forum/default.aspx?g=posts&t=900

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-24
    • 2013-08-17
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    相关资源
    最近更新 更多