2016-11-07 24 views
0

從javascript設置的值在回發後得到清除,我設置值給gridview處理列從setdata按鈕客戶端點擊,但是當開始列中的按鈕是clicke設置的值以前是清除。請參閱下面的代碼並提出解決方案。JavaScript中的數據集越來越清除回收

<%@ 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)); 

     } 
    } 
} 
+2

回發後數據無法在js中持久 – Imad

+0

因此,無論您需要存儲狀態並重新創建狀態,還是需要查看使用ajax都無法刷新頁面的情況。 – epascarello

+0

我試過使用ajax更新面板,但仍然清除值。 – user6634447

回答

0

要澄清@Imad,回發是一個完整的頁面重新加載。因此,如果您有任何JavaScript,它也將被重新加載。這將清除您存儲的任何值。如果您必須將JavaScript與Web表單混合,我會推薦兩種方法。

1)您的JavaScript將需要使用ajax調用和更新控件。僅在完整保存中使用回發​​。意思是如果你有一個表單,它需要某人的名字/地址。我會通過ajax驗證數據。然後,當這一切都正確時,我會觸發回寄保存。

2)創建一些隱藏字段,它將保存您需要保存的重要變量,並通過服務器標籤<%= =>訪問這些變量。這種方式非常糟糕,但可以完成。

+0

我試過使用ajax更新面板,但仍然清除值。 – user6634447

+0

即使您使用的是AJAX更新Panal,如果您回發它仍然會清除您的JavaScript。這是webforms的本質。您的JavaScript永遠不會在回傳中生存。您可能需要消除回傳或解決此問題。 – gh9