c#
  • asp.net
  • eval
  • 2014-09-01 38 views 0 likes 
    0

    我有一個Gridview的所有行作爲文本框和最後一列中的一個編輯按鈕。所有的文本框都有一個onclick屬性,它調用一個javascript方法。下面是文本框之一的HTML代碼:如何通過attributes.add屬性傳遞Eval方法?

    <asp:TextBox ID="txtLoginName" Onclick='<%# "pass(" + Eval("userid") + ");" %>' 
        Text='<%# Eval("LoginName")%>' runat="server"></asp:TextBox> 
    

    當用戶點擊編輯鍵,單擊屬性被刪除,按鈕變爲保存。進行更改後,當用戶單擊保存時,我想再次重新添加onclick屬性。這是我曾嘗試的代碼:

    數據綁定方法如eval()函數,XPath的(),並綁定()只能在上下文中使用

    protected void btnEdit_Click(object sender, EventArgs e) 
         { 
          Button btn = (Button)sender; 
          GridViewRow row = (GridViewRow)btn.NamingContainer; 
          TextBox lstTxt = (TextBox)row.FindControl("txtLoginName"); 
          if (btn.Text == "Edit") 
          { 
           lstTxt.Attributes.Remove("onclick"); 
           btn.Text = "Save"; 
          } 
          else 
          { 
           lstTxt.Attributes.Add("onclick", "<%# 'pass(" + Eval("userid") + ");' %>"); 
           btn.Text = "Edit"; 
          } 
    

    但其示出了錯誤一個數據綁定控件

    如何正確傳遞?

    +0

    的用戶ID是列在GridView控件??? – 2014-09-01 11:23:08

    +0

    @Ganesh_Devlekar沒有從gridview綁定到的數據庫的列。 – nitinvertigo 2014-09-01 11:24:06

    回答

    2

    你必須從其他地方得到userid。您可以將其存儲在例如HiddenField或隱形標籤中,並使用e.Row.FindControl來獲得此控件。另一種方法是使用按鈕的CommandArgument

    ASPX:

    <asp:Button ID="btnEdit" runat="server" CommandName="Edit" CommandArgument='<%# Eval("userid") %>'> 
    

    代碼隱藏:

    string userID = btn.CommandArgument.ToString(); 
    lstTxt.Attributes.Add("onclick", "pass(" + userID + ");"); 
    

    這是一個像HiddenField控制的方法:

    <asp:TemplateField HeaderText="UserID" Visible="false"> 
    <ItemTemplate> 
        <asp:HiddenField ID="HidUserID" Value='<%#Eval("userid") %>' runat="server" /> 
    </ItemTemplate> 
    </asp:TemplateField> 
    

    現在你可以從代碼隱藏通過FindControl得到它:

    HiddenField hidUserID = (HiddenField)e.Row.FindControl("HidUserID"); 
    string userID = hidUserID.Value; 
    
    +0

    實際上,當用戶單擊文本框時,需要填充另外兩個GridView。爲此,我使用hiddenfield並使用它的值填充其他gridviews – nitinvertigo 2014-09-01 11:35:15

    +0

    嗨,我已經使用了commandargument方法,它完美地工作。唯一的不是傳遞「<%#」pass(「+ userID +」);' %>「我通過了」pass(「+ userID +」);「在屬性.add中。請更新您的答案,以便我可以標記它。 – nitinvertigo 2014-09-01 11:49:58

    +0

    @nitinvertigo:哎呀,當然,這是一個複製粘貼問題。我糾正了它。 – 2014-09-01 11:55:04

    1

    你可以使用這樣的:

    使用它在網格視圖模板場

    <asp:TemplateField HeaderText="userid" Visible="false"> 
    <ItemTemplate> 
    <asp:Label runat="server" id="lblUserid" style="display:none" Text='<%# Eval("UserID") %>' /> 
    </ItemTemplate> 
    
    </asp:TemplateField> 
    

    發現後面的代碼

    GridViewRow row = (GridViewRow)btn.NamingContainer; 
          Label lbl = (TextBox)row.FindControl("lblUserid"); 
    string userid=lblUserid.Text; 
    lstTxt.Attributes.Add("onclick", "<%# 'pass(" + userid + ");' %>"); 
    
    +0

    嗨,我已經使用Tim提出的commandargument方法,它的工作原理。有一件事是你不能像「<%#」pass(「+ userid +」);' %>」。而是像「pass(」+ userID +「)」傳遞它;「那麼它的工作。謝謝你的答案 – nitinvertigo 2014-09-01 11:52:35

    +0

    我用'userID'作爲'userID'它會根據我的代碼顯示錯誤,因爲C#區分大小寫。 – 2014-09-01 11:57:24

    +0

    對不起我的錯誤。是的,你是對的,它應該是兩個用戶 – nitinvertigo 2014-09-01 12:18:47

    相關問題