如何访问Button的ValidationGroup属性

时间:2015-04-15 13:49:51

标签: javascript jquery validation

我需要在javascript函数中访问按钮的ValidationGroup值。 该按钮是嵌套网格的一部分。我在RowDataBound事件期间为按钮和Dropdown控件设置ValidationGroup值。如下所示:

protected void UserGroupGridView_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        try
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                int tiGroupID = Convert.ToInt32(UserGroupGridView.DataKeys[e.Row.RowIndex].Value.ToString());
                m_strUserID = CommonMethods.ParseUserID(User.Identity.Name);
                GridView tgvGroupMember = (GridView)e.Row.FindControl("GroupMemberGridView");
                populateGroupMemberGrid(tgvGroupMember, tiGroupID);

                //Get the Footer controls that have the new entry data
                Control tFooterControls = CommonMethods.getFooterControls(tgvGroupMember);                
                DropDownList tddlRecipientNames = tFooterControls.FindControl("mggvDDLMemberName") as DropDownList;
                m_strXmlTableData = m_pagingClient.GetAllPossibleGroupMembers(m_strUserID, tiGroupID);
                DataTable tdtAllGroupMembers = CommonMethods.ParseXML(m_strXmlTableData);
                tddlRecipientNames.DataSource = tdtAllGroupMembers;
                tddlRecipientNames.DataTextField = tdtAllGroupMembers.Columns["MemberName"].ToString();
                tddlRecipientNames.DataValueField = tdtAllGroupMembers.Columns["MemberID"].ToString();
                tddlRecipientNames.DataBind();
                tddlRecipientNames.Items.Insert(0, new ListItem("", "0"));//This is needed for the jquery-chosen dropdown to add data-holder text
                tddlRecipientNames.ValidationGroup = "DDLVal_" + tiGroupID.ToString();

                Button tbtnAdd = tFooterControls.FindControl("mggvAddButton") as Button;
                tbtnAdd.ValidationGroup = "DDLVal_" + tiGroupID.ToString();
            }
        }
        catch (Exception ex)
        {
            //TO DO: Response.Redirect("~/Error.aspx");
        }
    }

这是Dropdown和Button的标记:

<asp:DropDownList ID="mggvDDLMemberName" runat="server" ClientIDMode="Static" class="chosen-single" data-placeholder="Choose member…">
</asp:DropDownList>
<asp:RequiredFieldValidator ID="ReqValueDDLMemberInsert" runat="server" InitialValue="0"                                         ControlToValidate="mggvDDLMemberName" ErrorMessage="Selection required." CssClass="message-error-dropdown">
</asp:RequiredFieldValidator>

<asp:Button ID="mggvAddButton" runat="server" CommandName="Add" Text="Add Member" Width="90%" ClientIDMode="Static" CssClass="gridActionbutton" CausesValidation="true" OnClientClick="return Validate(this);" >
</asp:Button>

单击该按钮时,我调用客户端函数Validate(this)。 这是Validate函数:

function Validate(ClientID) {
  valgroup = ClientID.Validators[0].validationGroup;
//THIS IS THE PROBLEM.  valgroup is null?
  alert(valgroup);
 if (Page_ClientValidate(valgroup)) {
//   alert('it is valid');
   return true;
 }
 else {
 //  alert('No valid');
   return false;
 }

如何访问按钮的ValidationGroup属性?

更新 玩弄不同的jquery方法,这就是我发现的...... 我可以使用这个获取发送按钮的ID:

function Validate(ClientID)
{
    var val = $(ClientID).attr('id');
    alert(val); //this returns the id of the button (mggvAddButton)

    //This returns the DropDown list id, entries, etc.
    //This dropdown is beside the button.
    var val = $(ClientID).parent().parent().html();
    alert(val);

    //When I try to get the id of the dropdown, I get 'undefined.
    var val = $(ClientID).parent().parent().attr('id');
    alert(val);
}

为什么不能找到下拉列表的ID?它在html中!

更新

添加整个嵌套网格以更好地解释我需要做什么......

<div id="div<%# Eval("GroupID") %>" style="display:none">
<asp:GridView ID="GroupMemberGridView" runat="server" AutoGenerateColumns="false" OnRowDeleting="GroupMemberGridView_RowDeleting" 
OnRowCommand="GroupMemberGridView_RowCommand" CssClass="grid" ShowFooter="true">
<Columns>
<asp:TemplateField HeaderText="MemberID">
<ItemTemplate>
<asp:Label ID="mggvLblMemberID" runat="server" Text='<%# Bind("MemberID") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Member Name" ItemStyle-Wrap="false"> 
<ItemTemplate>
<asp:Label ID="mggvLblMemberName" runat="server" Text='<%# Bind("MemberName") %>'></asp:Label>
</ItemTemplate>               
<FooterTemplate>
<asp:DropDownList ID="mggvDDLMemberName" runat="server" ClientIDMode="Static" class="chosen-single" data-placeholder="Choose member…">
</asp:DropDownList>
<asp:RequiredFieldValidator ID="ReqValueDDLMemberInsert" runat="server" InitialValue="0" ControlToValidate="mggvDDLMemberName" ValidationGroup="InsertMemberValidation" ErrorMessage="Selection required." CssClass="message-error-dropdown">
</asp:RequiredFieldValidator>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Active Device(s)">                   
<ItemTemplate>
<asp:Label ID="mggvLblActiveDevice" runat="server" Text='<%# (Boolean.Parse(Eval("ActiveDevice").ToString())) ? "Yes" : "No" %>'></asp:Label>
</ItemTemplate>                   
</asp:TemplateField>
<asp:TemplateField HeaderText="Action" ItemStyle-Wrap="false" ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:Button ID="mggvDeleteButton" runat="server" CausesValidation="False" CommandName="Delete"                                               Text="Delete" CssClass="gridActionbutton"  OnClientClick="return confirm('Are you sure you want to delete this Group Member?')" >
</asp:Button>
</ItemTemplate>                                     
<FooterTemplate>
<asp:Button ID="mggvAddButton" runat="server" CommandName="Add" Text="Add Member" Width="90%" ClientIDMode="Static" CssClass="gridActionbutton" CausesValidation="true" ValidationGroup="InsertMemberValidation" OnClientClick="return Validate(this);" >
</asp:Button>
</FooterTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>

更新

经过一些调试,我了解到第一个嵌套网格及其所有控件都可以轻松访问。但是,第二个嵌套网格没有设置控件ID。

javascript函数:

function Validate(sender)
{
    var e = document.getElementById("mggvDDLMemberName");
    var strSel = "The Value is: " + e.options[e.selectedIndex].value + " and text is: " + e.options[e.selectedIndex].text;

    alert(strSel);
}

当我点击第一个嵌套网格的“添加”按钮并在下拉列表中选择一个值时,上面的javascript函数会正确显示数据。

当我点击SECOND嵌套网格的“添加”按钮并在“下拉列表”中选择一个值时。上面的javascript函数将Value显示为0,文本为空。

但是,在两种情况下,成员都已成功添加到组中,并在单击“添加”按钮后显示在列表中。

因此,无论单击哪个“添加”按钮,只显示此javascript函数中的第一个嵌套网格数据。但是在代码隐藏中,Add事件可以正确地确定将成员添加到哪个嵌套网格。

这是GroupMember(嵌套网格)添加行命令:

protected void GroupMemberGridView_RowCommand(object sender, GridViewCommandEventArgs e)
 {
    try
    {
       if (e.CommandName.Equals("Add"))
       {                 
          //Get the Footer controls that have the new entry data
          GridView tgvGroupMember = (GridView)sender;
          Control tFooterControls = CommonMethods.getFooterControls(tgvGroupMember);
          int tiMemberID = Convert.ToInt32((tFooterControls.FindControl("mggvDDLMemberName") as DropDownList).SelectedItem.Value);
          int tiGroupID = Convert.ToInt32((tgvGroupMember.Parent.FindControl("uggvLblGroupID") as Label).Text);

          //Insert into the database
          m_pagingClient.InsertGroupMember(tiGroupID, tiMemberID);

          //Rebind the grid with the new data
          populateGroupGrid();
        }
     }
     catch (Exception ex)
     {
        //TO DO: Response.Redirect("~/Error.aspx");
      }
}

上述方法确定哪个会员网格触发了该事件并从那里开始。

我需要在javascript函数的客户端执行同样的操作来验证DDL条目。

0 个答案:

没有答案
相关问题