Javascript 在GridView中获取正确的行

Javascript 在GridView中获取正确的行,javascript,asp.net,gridview,calendarextender,Javascript,Asp.net,Gridview,Calendarextender,我有一个GridView,其中一个单元格包含一个文本框,该文本框上连接了一个CalendarExtender。另一个单元格中有一个触发CalendarExtender的按钮。选择日期后,将在客户端触发checkDate函数,在该函数的末尾,我希望触发按钮的服务器端事件。我唯一的问题是如何判断用户单击了哪一行,以便从javascript触发右按钮事件 以下是我的GridView: <asp:GridView ID="GridView1" runat="server" AutoGenerate

我有一个GridView,其中一个单元格包含一个文本框,该文本框上连接了一个CalendarExtender。另一个单元格中有一个触发CalendarExtender的按钮。选择日期后,将在客户端触发checkDate函数,在该函数的末尾,我希望触发按钮的服务器端事件。我唯一的问题是如何判断用户单击了哪一行,以便从javascript触发右按钮事件

以下是我的GridView:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" BackColor="White"
    BorderColor="#999999" BorderStyle="None" BorderWidth="1px" CellPadding="3" GridLines="Vertical"
    OnRowCreated="GridView1_RowCreated" OnRowDataBound="GridView1_RowDataBound" OnRowCommand="GridView1_RowCommand">
    <Columns>
        <asp:TemplateField HeaderText="Movie ID">
            <ItemTemplate>
                <asp:Label runat="server" ID="lblMovieId" Text='<%#Eval("MovieId") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Movie Name">
            <ItemTemplate>
                <%#Eval("MovieName") %></ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Return Date">
            <ItemTemplate>
                <asp:TextBox runat="server" ID="txtRetDate" Text='<%# ((DateTime)Eval("ReturnDate")).ToShortDateString()%>'
                    BackColor="#EEEEEE" BorderStyle="None"></asp:TextBox>
                <asp:CalendarExtender ID="CalendarExtender1" runat="server" PopupButtonID="btnUpdate"
                    TargetControlID="txtRetDate" Format="dd/MM/yyyy" OnClientDateSelectionChanged="checkDate" >
                </asp:CalendarExtender>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="" HeaderStyle-Width="135px">
            <ItemStyle VerticalAlign="Top" />
            <ItemTemplate>
                <asp:Button runat="server" ID="btnUpdate" Text="Update" CommandName="Update" />
                <asp:Button runat="server" ID="btnRemove" Text="Remove" CommandName="Remove" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

我不明白为什么必须从JS调用服务器端的按钮单击事件处理程序。。。 如果需要在服务器端从javascript调用“something”,作为javascript函数中的最后一个操作,那么可以使用JQuery/javascript调用该函数。你应该重构你的代码,把服务器端的按钮点击的代码转换成一个你可以从服务器端的按钮点击和javascript调用的方法

在服务器端,我假设您需要单击按钮事件。您必须按照如下所示重构它:

Public void Button_Click(object sender,eventArgs e){

FuntionIWantCall();
}


//this is the code that was into the button click befeore refactoring:

private void FuntionIWantCall(){

//Do something on the server side
}


//this is the function you can call from javascript

[WebMethod]
public static void CalledFromJS(){
FuntionIWantCall();
}  
在您的页面上,您必须添加脚本管理器:

<asp:ScriptManager ID="ScriptManager1" runat="server"     EnablePageMethods="True"></asp:ScriptManager>


//at the end of your javascript function

PageMethods.CalledFromJS();

//在javascript函数的末尾
PageMethods.CalledFromJS();

当按钮触发CalendarExtender时,不会触发该按钮的服务器端按钮单击事件。这就是为什么我必须在完成后从javascript触发它。在您的回答中,我仍然不知道用户在哪一行单击了按钮(显示在每一行上),并且我仍然需要它从该行提取数据以用于“我的代码隐藏”事件。您可以发布gridView源代码吗?(只是“HTML”)好的,我添加了GridView的简化版本