来自javascript的数据集在回发后被清除

时间:2016-11-07 14:39:14

标签: javascript asp.net

jback设置的值在回发后被清除,我从setdata按钮客户端点击设置值到gridview进程列但是当开始列中的按钮是clicke时,先前设置的值被清除。请参阅下面的代码并提出解决方案。

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

      }
   }
}

1 个答案:

答案 0 :(得分:0)

为了澄清@Imad,回发是一个完整的页面重新加载。因此,如果您有任何JavaScript,它也将被重新加载。这将清除您存储的任何值。如果您必须将javascript与网络表单混合使用,我建议采用两种方法。

1)你的javascript需要使用ajax调用和更新控件。仅在完整保存时使用回发。这意味着如果你有一个表单,它需要Someones名称/地址。我会通过ajax验证数据。然后,当它完全正确时,我会触发回发以进行保存。

2)创建一些隐藏字段,它们包含您需要保存的重要变量,并通过服务器标签<%= =>访问这些变量。这种方式非常糟糕,但可以做到。