2016-11-07 7 views
0

Die Werte von Javascript eingestellt wird nach Postback gelöscht, ich bin Wert auf Gridview Prozess Spalte SetData Schaltfläche Client klicken, aber wenn die Schaltfläche in der Startspalte ist Clicke der Wert zuvor festgelegt ist gelöscht. Bitte sehen Sie den Code unten und schlagen Sie eine Lösung vor.Datensatz von Javascript wird nach Postback gelöscht

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

Daten können in js nach dem Postback nicht gespeichert werden – Imad

+0

Entweder müssen Sie den Status speichern und neu erstellen oder Sie müssen mit Ajax suchen, kann die Seite nicht aktualisieren. – epascarello

+0

Ich habe versucht mit Ajax Update Panel aber immer noch der Wert wird gelöscht. – user6634447

Antwort

0

Um @Imad zu verdeutlichen, ist ein Postback ein kompletter Neuladen der Seite. Also, wenn Sie Javascript haben, wird es auch neu geladen. Das löscht alle gespeicherten Werte. Wenn Sie Javascript mit Webformularen mischen müssen, gibt es zwei Möglichkeiten, die ich empfehlen würde.

1) Ihr JavaScript muss Ajax-Aufrufe und Update-Steuerelemente verwenden. Nur Postback bei einem vollständigen Speichervorgang verwenden. Das heißt, wenn Sie ein Formular haben und es Someones Name/Adresse braucht. Ich würde die Daten durch Ajax validieren. Und dann, wenn alles korrekt ist, würde ich ein Postback zum Speichern auslösen.

2) Erstellen Sie einige ausgeblendete Felder, die die wichtigen Variablen enthalten, die Sie speichern müssen, und greifen Sie darauf über die Server-Tags <%= => zu. Dieser Weg ist ziemlich schlimm, aber es kann getan werden.

+0

Ich habe versucht mit Ajax Update Panel, aber immer noch der Wert wird gelöscht. – user6634447

+0

Auch wenn Sie eine AJAX Update Panal verwenden, wird Ihr Javascript nach dem Postback immer noch gelöscht. Das ist die Natur von Webforms. Dein Javascript wird niemals ein Postback überleben. Sie müssen entweder das Postback beseitigen oder umgehen. – gh9

Verwandte Themen