Проверка только с одним переключателем - PullRequest
1 голос
/ 14 марта 2012

У меня есть список радиокнопок с тремя вариантами выбора. Когда пользователь нажимает на опцию «Предоставлено», под ней открываются два текстовых поля. Эти два обязательны при выборе этой опции. Как я могу требовать эти два только тогда, когда эта опция отмечена, но не, если это не так и все еще позволяет мне обрабатывать форму? Я пытался использовать ValidationGroup, но, поскольку я все еще новичок в разработке, я думаю, что что-то упустил. Любое руководство будет оценено, спасибо заранее!

<asp:RadioButtonList ID="rblCreat" runat="server" RepeatDirection="Horizontal" CssClass="rblMargin rblCreat">
    <asp:ListItem>N/A</asp:ListItem>
    <asp:ListItem>DIC to Obtain</asp:ListItem>
    <asp:ListItem>Provided</asp:ListItem>
</asp:RadioButtonList>
<div style="display: none;" id="provided-fields">
    <br />
    <p style="margin-left: 250px">
        Results:
        <asp:TextBox ID="txtCreatResults" runat="server" Width="99px" TabIndex="21" Height="22px"
            CssClass="margin"></asp:TextBox>
        <asp:RequiredFieldValidator ID="rfvResults" runat="server" ControlToValidate="txtCreatResults"
            ErrorMessage="*Required" ValidationGroup="provided"></asp:RequiredFieldValidator>
        <br />
        Date:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        <asp:TextBox ID="txtCreatDate" runat="server" Width="99px" TabIndex="22" onkeydown="return DateFormat(this, event.keyCode)"
            Height="22px"></asp:TextBox>
        <asp:RequiredFieldValidator ID="rfvDate" runat="server" ControlToValidate="txtCreatDate"
            ErrorMessage="*Required" ValidationGroup="provided"></asp:RequiredFieldValidator>
    </p>
</div>

Ответы [ 3 ]

1 голос
/ 14 марта 2012

Ваш код позади

protected void Page_Load(object sender, EventArgs e)
{
    rblCreat.Items[0].Attributes.Add("onclick", "abc('1');");
    rblCreat.Items[1].Attributes.Add("onclick", "abc('2');");
    rblCreat.Items[2].Attributes.Add("onclick", "abc('3');");
}

Ваш Java Script

<script language="javascript" type="text/javascript">
    function abc(ID) {
        if (ID == '3') {
            var btn = document.getElementById("<%=btn.ClientID%>");
            btn.onclick = function () {
                WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(btn.id, "", true, "provided", "", false, false));
            }
            document.getElementById('providedfields').style.display = 'block';
        }
        if (ID == '1' || ID == '2') {
            var btn = document.getElementById("<%=btn.ClientID%>");
            btn.onclick = function () {
                WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(btn.id, "", true, "newValGroup", "", false, false));
            }
            document.getElementById('providedfields').style.display = 'none';
        }
    }
</script>

Ваш HTML

<asp:radiobuttonlist id="rblCreat" runat="server" repeatdirection="Horizontal" cssclass="rblMargin rblCreat">
        <asp:ListItem Value="1">N/A</asp:ListItem>
        <asp:ListItem Value="2">DIC to Obtain</asp:ListItem>
        <asp:ListItem Value="3">Provided</asp:ListItem>
    </asp:radiobuttonlist>
<div style="display: none;" id="providedfields">
    <br />
    <p style="margin-left: 250px">
        Results:
        <asp:textbox id="txtCreatResults" runat="server" width="99px" tabindex="21" height="22px"
            cssclass="margin"></asp:textbox>
        <asp:requiredfieldvalidator id="rfvResults" runat="server" controltovalidate="txtCreatResults"
            errormessage="*Required" validationgroup="provided"></asp:requiredfieldvalidator>
        <br />
        Date:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        <asp:textbox id="txtCreatDate" runat="server" width="99px" tabindex="22" height="22px"></asp:textbox>
        <asp:requiredfieldvalidator id="rfvDate" runat="server" controltovalidate="txtCreatDate"
            errormessage="*Required" validationgroup="provided"></asp:requiredfieldvalidator>
    </p>
</div>
<asp:button id="btn" validationgroup="provided" runat="server" />

Когда вы нажимаетена кнопку будет произведена обратная передача в случае использования других опций.

0 голосов
/ 14 марта 2012

Перед обработкой формы вы можете проверить (по коду сервера), проверена ли нужная опция в списке радиобуттон. Если нет, установите для свойства Enabled обязательных полевых валидаторов значение False.

0 голосов
/ 14 марта 2012

Я полагаю, что CustomValidator может помочь вам в этом.

<asp:CustomValidator 
runat="server" 
id="cusCustom" 
controltovalidate="txtCreatDate" 
onservervalidate="cusCustom_ServerValidate" 
errormessage="You must enter a text." />

, а затем написать метод в вашем коде с любой логикой, которая вам может понадобиться.

 protected void cusCustom_ServerValidate(object sender, ServerValidateEventArgs e)
    {
        if (rblCreat.SelectedIndex == 1)
        {
            if (e.Value.Length > 0)
            {
                e.IsValid = true;
            }
            else
            {
                e.IsValid = false;
            }
        }
        else {
            e.IsValid = true;
        }
    }

Примечание. Это не написано ни в одной среде IDE, поэтому я не уверен в синтаксисе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...