【问题标题】:How to stop losing values after postback?回发后如何停止丢失价值?
【发布时间】:2023-04-08 00:43:02
【问题描述】:

我有一个带有文本框的 GridView,用户可以在其中在文本框中输入信息,它会根据来自文本框的值在网格上创建行。但是将行添加到网格的按钮会导致回发,所以我在后面的代码中丢失了所有值。

网格和文本框的代码:

<div style="padding-top:20px">
                <fieldset class="groupbox_nohide" >    
                    <div style="width:100%">
                        <asp:UpdatePanel ID="udpCosts" UpdateMode="Conditional" runat="server">
                            <ContentTemplate>
                                <asp:GridView  style="width:75%;float:left"  
                                    ID="gvCosts" 
                                    ShowHeaderWhenEmpty="true"
                                    CssClass="tblResults" 
                                    runat="server" 
                                    OnRowDataBound="gvCosts_RowDataBound"                             
                                    DataKeyField="ID" 
                                    AutoGenerateColumns="false"
                                    allowpaging="false"
                                    AlternatingRowStyle-BackColor="#EEEEEE">
                                    <HeaderStyle CssClass="tblResultsHeader" />
                                    <Columns>       
                                        <asp:BoundField DataField="CreditorCode" HeaderText="Creditor Code"></asp:BoundField>
                                    </Columns>
                                </asp:GridView>
                            </ContentTemplate>
                            <Triggers>
                                <asp:AsyncPostBackTrigger ControlID="btnCreateCost" />
                                <asp:AsyncPostBackTrigger ControlID="btnUpdateCost" /> 
                            </Triggers>
                        </asp:UpdatePanel> 
                        <div id="divAddEditPiece" runat="server">      
                <table>
                    <tr class="tblResults">
                        <td class="header" style="border-right:2px">
                            Creditor A/C<label style="color:Red"></label>
                        </td>
                    </tr>
                    <tr class="tblResults">

                        <td class="tblAddDetail" style="border-right:2px">
                            <a style="float:left;width:16px;height:16px;margin-right:0px;left:0px;top:1px" title="Pick from list..." class="iconSearch" id="btnAddDetailCreditor"></a>
                            <asp:HiddenField ID="hfCreditorID" runat="server"  />
                            <input type="text" id="txtAddEditCreditorCode" class="lookuppopup" style="text-transform:uppercase;width:80px" runat="server"/>
                        </td>
                        <td class="tblAddDetail" colspan="15">
                            <asp:LinkButton ID="btnCreateCost" OnClientClick="tinyMCE.triggerSave(false, true);" runat="server" style="float:left;width:25px" CssClass="btnNewSmall">Add</asp:LinkButton>
                        </td>
                    </tr>     
                </table>
            </div> 

然后在 javascript 代码中隐藏字段和文本框设置它们的值:

$('#<%= hfCreditorID.ClientID %>').val(result.ID);
$('#<%= txtAddEditCreditorCode.ClientID %>').val(result.AccountCode);

但是,一旦我单击创建按钮,值就会被设置回空白,因此在隐藏字段和文本框后面的代码中始终为空白:

protected override void OnInit(EventArgs e)
{
     btnCreateCost.Click += new EventHandler(btnCreateCost_Click);
}
protected void btnCreateCost_Click(object sender, EventArgs e)
    {
        int  tmpCredID;

        bool valid = true;
        string ErrMsg = "Error: The following fields cannot be empty:";

        if (!int.TryParse(hfCreditorID.Value, out tmpCredID))
        {
            valid = false;
            ErrMsg += "<br />Creditor Code";
        }
}

如何将这些值传递给后面的代码?

【问题讨论】:

  • @S.Akbari 抱歉,我不太明白我需要做什么。我需要绑定什么?
  • 刚刚,控件(隐藏字段、文本框)在更新面板之外,因此在异步回发之外...尝试在更新面板内容模板标签内移动控件...
  • @Dave 我厌倦了,但他们仍然回来,因为空白是背后的代码
  • @user123456789 只是为了确认一下,您封装了包括链接按钮在内的整个控件集,并且还在该控件的 asyncpostback 触发器中添加了 click 事件(仔细查看,您的asyncpostback 触发器没有定义事件...即 EventName="Click")?
  • @Dave 是的,我将整个 divAddEditPiece 部分移到了更新面板中。你是什​​么意思他们没有任何活动?函数OnInit 有EventHandler

标签: javascript c# jquery asp.net gridview


【解决方案1】:

在 jquery 中为您的 btnCreateCost 添加一个点击事件。然后您可以使用 ajax 帖子来完成您的工作。

$('#btnCreateCost').click(function(e){
    e.preventDefault();
     $.ajax({
        type: "Post",
        url: "yourwebmethodurl",
        data: "{'parametername':'" + parametervalue + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            alert(mes);
        },
        error: function (err) {
            alert(err);
        }
    })
});

这是示例的来源页面。我把两个帖子放在一起。 https://forums.asp.net/t/2047043.aspx?Stop+Page+Post+Back+using+Javascript+jQuery

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    • 2016-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多