2013-02-06 27 views
4

我有一個帶有標籤的gridview,以及一些使標籤可編輯的JavaScript和jQuery。GridView中的標籤更改,但更改不回發

但是,當我在我的代碼中回發和調試後,我沒有看到更改。

我該如何做到這一點,以便我可以在服務器上進行更改?

<asp:GridView ID="gvGroups" runat="server" AutoGenerateColumns="False" 
CssClass="table table-hover table-striped" GridLines="None" > 
    <Columns> 
     <asp:TemplateField HeaderText="Name" SortExpression="GroupDescription"> 
      <ItemTemplate> 
       <asp:Label ID="lblName" CssClass="edit" runat="server" Text='<%# Eval("GroupDescription") %>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 

function makeLabelsEditable() { 

    $(".edit").focusout(function() { 
     setLabel(this); 
    }); 

    $(".edit").click(function() { 
     editLabel(this); 
    }); 
} 

function editLabel(source) { 
    source.innerHTML = '<input type="text" maxlength="40" value="' + source.innerHTML + '"/>'; 
    $(source).unbind('click'); 
    source.children[0].focus() 
} 
function setLabel(source) {  
    if (source.children[0].value != '') { 
     $(source).click(function() { 
      editLabel(this); 
     }); 
     source.innerHTML = source.children[0].value; 
    }  
} 

回答

1

Label不會回發到服務器。他們的目的是隻讀和呈現爲一個跨度。如果你想要回發最容易的事情就是使用相同的值來控制Hidden,並且當你編寫代碼以允許編輯標籤時,確保將編輯後的值寫入HiddenHidden將被回發到服務器,然後您可以讀取該值。

您正在交換'動態'TextBox,因此服務器不知道您所做的輸入控制。你可以閱讀原始的發佈參數來獲取值,但是有一個可以寫入的靜態控件並知道它將具有你需要的值會更容易。

+0

我該如何動態地做到這一點?目前我基於標籤是否具有編輯類來做。 – user2043533

+0

@ user2043533爲每行添加一個「隱藏」控件到您的模板。當您寫入文本框(留下焦點或其他東西)時,只需確保將該值複製到「隱藏」中即可。這有點複雜,但你所做的事似乎並不是標準。不知道你爲什麼不在你的'GridView'中使用'EditTemplate'。 – Kelsey

+0

使用EditTemplate當我點擊標籤然後在文本框失去焦點時退出時,如何從編輯模式切換到非編輯模式:? – user2043533

0

您無法以這種方式在服務器上進行更改。您只需更改客戶端上的html

0

由於客戶端僅用於讀取,因此不會爲客戶端的標籤生成ViewState。因此,您在之前在服務器中設置的回發中獲得相同的值。

什麼,我能想到的最簡單的解決方法是:

  • 將一個文本框,而不是標籤。
  • 對它應用一個css類,使它看起來像一個標籤。
  • 點擊TextBox,刪除css。

只要您想給標籤外觀,就可以將css應用回來。

+0

我認爲你的理解是不正確的,或者至少我們可能會想到同樣的事情,但不同。 'Label'不會產生'ViewState',嘗試在ViewState中應用顏色或服務器端代碼,您將看到它將在PostBack之間保留。我們討論的區別在於呈現的控件(輸出)是一個範圍,不會回發任何東西。它與典型的span不同,所以ASP.NET對此一無所知。通常我使用'Literal'控件而不是'Label'來避免'ViewState'開銷。 – Kelsey

+0

有道理。感謝您的澄清。 – NaveenBhat