2014-10-04 37 views
0

當我在我的GridView點擊,因爲我想重裝後看在這一個apears其他頁面更多成員的問題:http://i.gyazo.com/48e040f1d276984c0d3c6bfd8c38c974.pngASP.net - 我的用戶名多寫一次?

<form id="form1" runat="server"> 
<div> 

    <asp:Label ID="Label_welcome" runat="server" Text="Välkommen mr:"></asp:Label> 

</div> 
    <asp:Button ID="B_logout" runat="server" OnClick="B_logout_Click" Text="Logga ut" /> 
    <br /> 
    <br /> 
<embed src="CV.pdf" width=1400px height=1000px > 
    <asp:SqlDataSource ID="SqlDataSourceRegister" runat="server" ConnectionString="<%$ ConnectionStrings:RegisterConnectionString %>" SelectCommand="SELECT * FROM [Table]"></asp:SqlDataSource> 

</div> 
    <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" CellPadding="4" DataSourceID="SqlDataSourceRegister" ForeColor="#333333" GridLines="None" Height="195px" Width="254px" DataKeyNames="Id" OnSelectedIndexChanged="GridView1_SelectedIndexChanged"> 
     <AlternatingRowStyle BackColor="White" ForeColor="#284775" /> 
     <Columns> 
      <asp:CommandField ShowSelectButton="True" /> 
      <asp:BoundField DataField="Id" HeaderText="Id" SortExpression="Id" ReadOnly="True" InsertVisible="False" /> 
      <asp:BoundField DataField="Användarnamn" HeaderText="Användarnamn" SortExpression="Användarnamn" /> 
      <asp:BoundField DataField="Email" HeaderText="Email" SortExpression="Email" /> 
      <asp:BoundField DataField="Lösenord" HeaderText="Lösenord" SortExpression="Lösenord" /> 
      <asp:BoundField DataField="Land" HeaderText="Land" SortExpression="Land" /> 
      <asp:BoundField DataField="Fullnamn" HeaderText="Fullnamn" SortExpression="Fullnamn" /> 
      <asp:TemplateField ShowHeader="False"> 

      </asp:TemplateField> 
     </Columns> 
     <EditRowStyle BackColor="#999999" /> 
     <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> 
     <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> 
     <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" /> 
     <RowStyle BackColor="#F7F6F3" ForeColor="#333333" /> 
     <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" /> 
     <SortedAscendingCellStyle BackColor="#E9E7E2" /> 
     <SortedAscendingHeaderStyle BackColor="#506C8C" /> 
     <SortedDescendingCellStyle BackColor="#FFFDF8" /> 
     <SortedDescendingHeaderStyle BackColor="#6F8DAE" /> 
    </asp:GridView> 

    <br /> 
    </form> 

</div> 

以上是我用的按鈕「N」代碼東西

public partial class _1 : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
     if (Session["New"] != null) 
      { 
       Label_welcome.Text += Session["New"].ToString(); 
      } 
      else 
      { 
       Response.Redirect("Login.aspx"); 
      } 
     } 
     protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      Response.Write("GridView1_SelectedIndexChanged"); 
     } 
     protected void B_logout_Click(object sender, EventArgs e) 
     { 
      Session["New"] = null; 
      Response.Redirect("Login.aspx"); 
     } 
    } 
} 
+2

您需要發佈,實際上在文本'Label_welcome'填充代碼。我懷疑你正在做類似'Label_welcome.Text + = username;'這會導致雙重顯示,但是如果沒有看到代碼,我們就無法判斷。 – Rhumborl 2014-10-04 12:01:03

+0

對不起,我更新了上面的代碼! – Wharruphomie 2014-10-04 12:08:42

+0

我也有一個很好的選擇,會話數據沒有被正確保存,或者正在超時並在很短的時間間隔內被清除。 – shawty 2014-10-04 12:11:08

回答

1

當您爲Label設置Text屬性時,您輸入的值將存儲在頁面的ViewState中,並在執行回發時重新構建。這是而不是每次都從aspx源代碼中讀取新鮮。因此,在你的代碼你Text屬性的值是這樣做的:

  1. 第一個請求:
    • ViewState:(什麼都沒有)
    • 讀aspx頁面:「Välkommen先生:」
    • Page_Load:Text += "admin" = "Välkommen mr:" + "admin" = 「Välkommen先生:管理員」
    • 請求結束 - 存儲值在ViewState
  2. 二次要求:
    • 讀自ViewState「Välkommen先生:管理」
    • 從aspx頁面閱讀 - 跳過,因爲在發現ViewState
    • 的Page_Load:Text += "admin" = "Välkommen mr:admin" + "admin" = 「Välkommen先生:adminadmin」
    • 請求結束 - 值存儲在ViewState

爲了解決這個問題,你有兩個選擇:

  1. 禁用ViewState使用EnableViewStateLabel的。這意味着該文本將不會被保存,但要注意,你就可以設置其他屬性也不會有的:

<asp:Label ID="Label_welcome" runat="server" Text="Välkommen mr:" EnableViewState="false"></asp:Label>

  • 將全文代替使用+ =:
  • Label_welcome.Text = "Välkommen mr:" + Session["New"].ToString();

    +0

    我使用了第二個選項,它工作真棒兄弟! – Wharruphomie 2014-10-04 12:49:52

    0

    讀你的代碼,我可以看到你努力保持簡單的單一會話變量來決定如何管理記錄在您的網頁的狀態。

    這樣做的最大問題是ASP.NET會話緩存非常非常脆弱。

    不能看到應用程序配置,我會做一個有根據的猜測,20分鐘的默認值在這裏有效。

    這意味着如果頁面仍然沒有被點擊或與之交互20分鐘或更長時間,那麼你會突然發現你保存的任何狀態現在都消失了。

    如果遠程主機上的創建.NET Web應用程序,你甚至可能發現你的主機供應商已經降低,即使進一步(我見過他們低至5到10分鐘之前。

    如果您想要實現一個健壯和正確運行的登錄/註銷方案,那麼請使用.NET實際爲ASP.NET提供的工具,以ASP.NET會員系統的形式提供給您。

    「羅拉的4個傢伙」網站一個偉大的多部分系列使用它,它可以在這裏找到:http://www.4guysfromrolla.com/articles/120705-1.aspx

    我還建議查看更新的「ASP.NET身份認證服務」的東西,尤其是所有朝着Owin & Katana自我託管堆棧的東西。

    ASP.NET Identity是即將推出的「One Platform」微軟願景的新身份登錄服務,其中一切都是模塊化和可互換的,一個單一身份系統可以提供從本地機器上的所有內容到使用一個OAuth提供程序,如Google或Twitter進行身份驗證。