複数の値を含む asp:ListBox があります。ユーザーは、このボックスで常に 1 つの特定の項目を選択する必要があり、オプションで他の項目を選択する必要があります。
これを行う最善の方法は何ですか?
前もって感謝します!
ASP.Netバリデーターはどれも、すぐに使用できる要件に適合していると思います。必要なのは、CustomValdiator
サーバーとクライアントのコードを使用して検証を実行することです。
例:
<script type="text/javascript" src="Scripts/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
function clientValidate(sender, args) {
args.IsValid = false;
$("#" + sender.controltovalidate + " option:selected").each(function (index, item) {
if ($(this).text() == "QuestionText1") {
args.IsValid = true;
return;
}
});
}
</script>
<asp:ListBox runat="server"
SelectionMode="Multiple" ID="lb" AppendDataBoundItems="false"
DataTextField="QuestionText" DataValueField="ID"
>
<asp:ListItem Text="text1" />
<asp:ListItem Text="text2" />
</asp:ListBox>
<br />
<br />
<asp:CustomValidator ErrorMessage="errormessage" ControlToValidate="lb"
ClientValidationFunction="clientValidate"
OnServerValidate="cv_ServerValidate"
runat="server" ID="cv" />
<asp:Button Text="text" runat="server" />
protected void cv_ServerValidate(object sender, ServerValidateEventArgs e)
{
e.IsValid = false;
foreach (ListItem item in this.lb.Items)
{
if (item.Selected)
{
if (item.Text.ToLower().Trim() == "questiontext1")
{
e.IsValid = true;
break;
}
}
}
}
私がすることは、フォームの送信時にJavaScriptの検証を行い、サーバー側の検証を行って、送信されたものが有効であることを確認することです。
カスタム検証コントロールを使用してこれを達成し、ポストバック時にページが有効であることを確認することもできます。