2013-07-10 34 views
0

我是一個asp.net頁面,可讓網站管理員選擇用戶作爲「系統主席」。爲此,我列出gridview中的用戶,並有一列單選按鈕來顯示當前主席是誰,或更改指定的主席。我使用的是按鈕的html輸入(type = radio)。當頁面加載時,如果「系統」有一個「主席」分配給它,我需要檢查相關的單選按鈕。我試圖用JavaScript或jQuery來做到這一點。我試過的腳本是:Javascript無法在gridview中獲得輸入元素

jQuery的嘗試1:

<script type="text/javascript"> 
    function initRadioButtons() { 
     $("#user268").attr('checked', 'checked'); 
    } 
</script> 

jQuery的嘗試2: 功能initRadioButtons(){ $( 「#user268」)丙( '檢查',真); }

的JavaScript(RB設置爲null):

<script type="text/javascript"> 
     function initRadioButtons() { 
     var rb = document.getElementById(user268"); 
     } 
</script> 

這裏是我的.aspx文件在GridView:

<Custom:GridView ID="gvUsers" DataSourceID="dsUsers" CellPadding="3" AutoGenerateColumns="false" 
    ArrowUpImageUrl="~/images/SortUpArrow.jpg" ArrowDownImageUrl="~/images/SortDownArrow.jpg" 
    Width="100%" ShowWhenEmpty="true" EmptyDataText="No Users Returned" DataKeyNames="userID" 
    AllowSorting="true" runat="server"> 
     <Columns> 
      <asp:TemplateField HeaderText="AST Chair" ItemStyle-HorizontalAlign="Center" ItemStyle-VerticalAlign="Middle" 
      SortExpression="IsChair"> 
      <ItemTemplate> 
       <input type="radio" id='user<%# Eval("userID") %>' name="isChair" value='<%# Eval("userID") %>' onclick="radioButtonClicked(this);" /> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:BoundField HeaderText="Username" DataField="userName" sortExpression="userName" ItemStyle-HorizontalAlign="Left" /> 
      <asp:BoundField HeaderText="First Name" DataField="FirstName" SortExpression="FirstName" ItemStyle-HorizontalAlign="Left" /> 
      <asp:BoundField HeaderText="Last Name" DataField="LastName" SortExpression="LastName" ItemStyle-HorizontalAlign="Left" /> 
    </Columns> 
</Custom:GridView> 

我在做什麼錯?

+0

運行該應用程序,然後檢查該元素。元素的Id是你期望的嗎? Asp.Net Web表單會自動將父容器的Id添加到它。你的第二個片段也應該在'user268'前面。 – Justin

回答

0

我建議兩件事。首先JavaScript:

<script type="text/javascript"> 
    $(document).ready(function(){ 
     initRadioButtons(); 
    }); 

    function initRadioButtons() { 
     $(".user268").attr('checked', 'checked'); // notice i changed to class for next one 
    } 
</script> 

然後,我會檢查正在運行的頁面的查看源,是否顯示在ID字段?

id='user<%# Eval("userID") %>' 

我認爲你必須以不同的方式做那條線。它必須是runat="server"才能使數據綁定起作用。因爲你有runat="server"那麼你實際上必須使用一個類,因爲webforms會自動分配一個ID。它也必須是<%# %>中包含的完整屬性值。所以我的猜測是,這條線應該更像:

<input runat="server" type="radio" class='<%# string.Format("user{0}", Eval("userID")) %>' name="isChair" value='<%# Eval("userID") %>' onclick="radioButtonClicked(this);" /> 

現在我們已經走到這一步,我認爲你將有一個問題是,你正在使用在GridView的<input>標記,以便它不會被調回爲綁定的一部分。通常你會用<asp:RadioButton>來做到這一點。

+0

你的第一個建議獲得勝利。我在代碼後面的Page_Load()函數中調用了initRadioButtons()函數 - 因此在頁面完全填充之前運行javascript。將該調用移動到$(document).ready(function())上會有所不同。但是,它允許我使用gridview中的html 元素上的數據綁定 - 去圖。 – JeffW

+0

啊,很高興它的工作,這只是一個關於'輸入'標籤的猜測,並且我在點擊發布後意識到您只有'eval()',因此無需將該值過帳。 – rtpHarry