簡體   English   中英

回傳后會清除javascript中的資料集

[英]Data set from javascript getting cleared after postback

回傳后將從javascript設置的值清除,我正在通過setdata按鈕客戶端單擊將值設置為gridview進程列,但是單擊開始列中的按鈕時,先前設置的值將被清除。 請參見下面的代碼並提出解決方案。

   <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

  <!DOCTYPE html>

  <html xmlns="http://www.w3.org/1999/xhtml">
 <head runat="server">
<title></title>
 <script type="text/javascript">

   function SetData(name, name2) {
       document.getElementById(name).innerHTML = 'data.d.Name';
       document.getElementById(name2).innerHTML = 'data.d.Name2';
   }
  </script>
 </head>
 <body>
<form id="form1" runat="server">
   <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
     <div>
    <asp:GridView ID="gvMonitoring" runat="server" Width="100%" AllowPaging="false" PageSize="10"
                            AutoGenerateColumns="false" DataKeyNames="Id" 
                            EnableViewState="true" OnRowDataBound="gvMonitoring_OnRowDataBound">
                            <Columns>
                                <asp:TemplateField HeaderText="Name">
                                    <ItemTemplate>
                                        <asp:Label ID="lblName" runat="server" Text='<%# Bind("Name") %>'></asp:Label>
                                    </ItemTemplate>
                                </asp:TemplateField>
                                   <asp:TemplateField HeaderText="Name 2">
                                    <ItemTemplate>
                                        <asp:Label ID="lblName2" runat="server" EnableViewState="True" ></asp:Label>
                                    </ItemTemplate>
                                </asp:TemplateField>
                                <asp:TemplateField  HeaderText="Set Data">
                                    <ItemTemplate>
                                        <asp:Button ID="btnSetData" runat="server" Text="Set Data"  />
                                    </ItemTemplate>
                                </asp:TemplateField>
                                <asp:TemplateField HeaderText="Start">
                                    <ItemTemplate>
                                        <asp:Button ID="btnStartTime" runat="server" Text="Postback" />
                                    </ItemTemplate>
                                </asp:TemplateField>
                            </Columns>
                        </asp:GridView>

</div>
  </ContentTemplate>  

    </asp:UpdatePanel>
    </form>
  </body>
 </html>

using System;
using System.Collections.Generic;
using System.Web.UI.WebControls;

public partial class ProcessDetail
{
    public long Id { get; set; }
    public string Name { get; set; }
}

public partial class _Default : System.Web.UI.Page
{
   protected void Page_Load(object sender, EventArgs e)
   {
       if (!IsPostBack)
       {
        var details = new List<ProcessDetail>();
        for (var i = 1; i <= 5; i++)
        {
            details.Add(new ProcessDetail() { Name = "Process " + i});
        }
        gvMonitoring.DataSource = details;
        gvMonitoring.DataBind();
    }
  }

  protected void gvMonitoring_OnRowDataBound(object sender, GridViewRowEventArgs e)
   {
       if (e.Row.RowType == DataControlRowType.DataRow)
       {
          var lblName = ((Label)e.Row.FindControl("lblName"));
          var lblName2 = ((Label)e.Row.FindControl("lblName2"));

        ((Button)e.Row.FindControl("btnSetData")).Attributes.Add("onclick", string.Format("SetData('{0}','{1}');return false;",                                                                                               lblName.ClientID, lblName2.ClientID));

      }
   }
}

為了澄清@Imad,回發是完整的頁面重新加載。 因此,如果您有任何JavaScript,它也將被重新加載。 這將清除您存儲的所有值。 如果您必須將javascript與Web表單混合使用,我建議使用兩種方法。

1)您的JavaScript將需要使用Ajax調用和更新控件。 僅在完全保存時使用回發。 意思是如果您有一個表單,並且它帶有“某人”的名稱/地址。 我會通過ajax驗證數據。 然后,當一切正確時,我將觸發回發以進行保存。

2)創建一些隱藏字段,其中包含您需要保存的重要變量,並通過服務器標簽<%= =>訪問這些變量。 這種方法非常可怕,但是可以做到。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM