我正在尝试访问位于GridView内部的服务器控件,但我不知道如何做到这一点.. 这是我的尝试:
<asp:GridView ....
.....
<Columns>
<asp:TemplateField>
...
..
<EditItemTemplate>
<asp:TextBox ID="txtName"runat="server" Text='<%# Bind("Name") %>' />
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="edit" ItemStyle-CssClass="td"
HeaderStyle-CssClass="listtitle">
<ItemTemplate>
<asp:ImageButton ID="btnEdit" runat="server" CommandName="Edit"
AlternateText="edit" ImageUrl="~/css/images/edit-icon.png" />
</ItemTemplate>
<EditItemTemplate>
<asp:LinkButton ID="btnUpdate" runat="server" CommandName="Update" Text="Save"
OnClientClick="javascript:return isValid('<%= txtName.ClientID%>')" /> |
<asp:LinkButton ID="btnCancel" runat="server"
CommandName="Cancel" Text="Cancel" />
</EditItemTemplate>
</asp:TemplateField>
...
..
</Columns>
.....
....
</asp:GridView>
问题出在这里
OnClientClick="javascript:return isValid('<%= txtName.ClientID%>')"
当它到达isValid函数时,我看到字符串“&lt;%= txtName.ClientID%&gt;”而不是我应该的实际控制器ID ..
所以问题是如何将id发送到JS脚本?
答案 0 :(得分:0)
在RowDataBound事件上,您需要读取txtName的客户端ID并设置链接按钮的OnClientClick。
void myGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
TextBox txt = (TextBox)e.Row.FindControl("txtName");
Button btn = (LinkButton)e.Row.FindControl("btnUpdate");
btn.OnClientClick = String.Format("javascript:return isValid('{0}')", btn.ClientID);
}
}
答案 1 :(得分:0)
如果字段在ItemTemplate
上,那么ibrams的回答是正确的。但是当您在EditItemTemplate
时,这不起作用也必须检查RowState
。条件将是这样的
if ((e.Row.RowState == (DataControlRowState.Edit | DataControlRowState.Alternate)) || (e.Row.RowState == DataControlRowState.Edit))
{
//logic here
}
但更短的解决方案是检查此条件GridView1.EditIndex == e.Row.RowIndex
该片段应为此。
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow && GridView1.EditIndex == e.Row.RowIndex)
{
TextBox txt = (TextBox)e.Row.FindControl("txtName");
LinkButton btn = (LinkButton)e.Row.FindControl("btnUpdate");
string script = String.Format("javascript:return isValid('{0}')", btn.ClientID);
btn.Attributes.Add("onclick", script);
}
}
答案 2 :(得分:0)
由于您要验证txtName textBox的值,因此使用标准的asp.net验证控件会更好。如果您有一些补语验证规则,那么您可以使用CustomValidator并指定javascript函数以在客户端处理验证。只需为附加到txtName控件和btnUpdate按钮的验证器设置相同的validatio ngroup值。