自定义DatePicker在GridView中不起作用

时间:2017-08-09 07:59:49

标签: javascript c# jquery asp.net gridview

我在ASP.NET中使用以下代码作为日期选择字段。

<asp:TemplateField ItemStyle-Width="10%" HeaderText="Date of Birth">
    <EditItemTemplate>
        <br />
        <asp:TextBox ID="text_master_dateedit" runat="server" Text='<%# Bind("MemberDOB", "{0:dd/MM/yyyy}") %>' Width="60%" CssClass="textfoot" ValidationGroup="editing" MaxLength="10" onkeypress="return false;" onkeyup="return false;" oncontextmenu="return false;" onpaste="return false;"></asp:TextBox> &nbsp;
        <a href="javascript:NewCssCal('<%=text_master_dateedit.ClientID %>','DDMMYYYY')"><img id="Img1" alt="Pick a Date" src="Images/cal.png" width="25" height="25" style="vertical-align:middle;" /></a><br />
        <asp:RequiredFieldValidator ID="requireddateedit" runat="server" ValidationGroup="editing" ForeColor="Red" Font-Bold="false" ControlToValidate="text_master_dateedit" ErrorMessage="Date required">*Required</asp:RequiredFieldValidator>
    </EditItemTemplate>
    <ItemTemplate>
        <asp:Label ID="label_master_dateview" runat="server" Text='<%# Bind("MemberDOB", "{0:dd/MM/yyyy}") %>'></asp:Label>
    </ItemTemplate>
    <FooterTemplate>
        <br />
        <asp:TextBox ID="text_master_datenew" runat="server" Text='<%# Bind("MemberDOB", "{0:dd/MM/yyyy}") %>' Width="60%" CssClass="textfoot" ValidationGroup="adding" MaxLength="10" onkeypress="return false;" onkeyup="return false;" oncontextmenu="return false;" onpaste="return false;"></asp:TextBox> &nbsp;
        <a href="javascript:NewCssCal('<%=text_master_datenew.ClientID %>','DDMMYYYY')"><img id="Img1" alt="Pick a Date" src="Images/cal.png" width="25" height="25" style="vertical-align:middle;" /></a><br />
        <asp:RequiredFieldValidator ID="requireddatenew" runat="server" ValidationGroup="adding" ForeColor="White" Font-Bold="false" ControlToValidate="text_master_datenew" ErrorMessage="Date required">*Required</asp:RequiredFieldValidator>
    </FooterTemplate>
</asp:TemplateField>

我在GridView中的文字字段和日期链接为TemplateField。当我运行代码时,我收到以下错误。

Compiler Error Message: CS0103: The name 'text_master_dateedit' does not exist in the current context

但同样的事情在GridView之外。如何解决GridView中标识文本字段ID的问题?我不想使用正常的DatePicker,因为我在所有项目中使用此代码。使用相同代码的任何解决方案都能使其工作吗?

NewCssCal函数是JavaScript代码,用于我所有项目中的日期选择字段。它适用于除GridView内部以外的所有情况。

修改

我也尝试使用ClientIDMode="Static"但仍然无效。

在C#中我使用下面的代码来访问日期字段的值,因为当文本字段在GridView内时我无法直接访问它。 这有效。

protected void gv_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    GridViewRow row = (GridViewRow)gv.Rows[e.RowIndex];
    string date = ((TextBox)row.Cells[0].FindControl("text_master_dateedit")).‌​Text;
}

是否也有类似的方法来访问此行中的文本字段?我想让这条线路起作用。有没有办法访问文本字段text_master_dateedit的ID(gridview中的文本字段)而不是'<%=text_master_dateedit.ClientID %>'

这不起作用。

<a href="javascript:NewCssCal('<%=text_master_dateedit.ClientID %>','DDMMYYYY')"><img id="Img1" alt="Pick a Date" src="Images/cal.png" width="25" height="25" style="vertical-align:middle;" /></a>

页面加载

protected void Page_Load(object sender, EventArgs e)
{
    try
    {
        if (Session["USER"] != null)
        {
            if (!Page.IsPostBack)
            {
                Tab1.CssClass = "Clicked";
                MainView.ActiveViewIndex = 0;
            }
        }
        else
        {
            Response.Redirect("LoginPage.aspx");
        }
    }
    catch
    {
        ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "alertMessage", "alert('Error Occured: Try Again!')", true);
    }
}

在页面加载中我只选择Tab1这是aspx页面的第一个选项卡。我在页面中总共有三个GridView和三个标签。我正在使用<asp:MultiView>

创建标签

1 个答案:

答案 0 :(得分:1)

您的代码显示:

  

string date =   ((文本框)row.Cells [0] .FindControl(&#34; text_master_dateedit&#34))。文本;

"foo{mywildcard}bar"这里是什么?

你可以试试这个:

row

对于客户端,您可以找到文本框的客户端ID,如下所示:

TextBox dateTxt   = (TextBox)GridViewID.Rows[CellIndex].FindControl("text_master_dateedit");
string dateString = dateTxt.Text;

参考this post

希望这有帮助!