3

2つのチェックボックスを検証しようとしています。フォームを有効にするには、そのうちの1つをチェックする必要があります。CustomValidatorコントロールを使用して、サーバーで検証したいと思います。

(この.ascxページは、別の.aspxページに表示されるフォームです。)

まず、.ascxページにチェックボックスとCustomValidatorコントロールを配置します。このような:

<tr>
        <td colspan="3">
            <input type="checkbox" runat="server" name="EmailCourse" class="" id="EmailCourse" value="" />
                Email course
<asp:CustomValidator id="CustomValidator1" runat="server" ErrorMessage="No checkbox checked" 
                 OnServerValidate="validateCheckBoxes_ServerValidate">
                </asp:CustomValidator>

        </td>
    </tr>
<tr>
        <td colspan="3">
            <input type="checkbox" runat="server" name="SpecialReport" class="" id="SpecialReport"  value="" />
                Special report
        </td>
    </tr>

次に、次のように、.ascx.csページの分離コードにvalidateCheckBoxes_ServerValidate関数を追加しました。

            protected void validateCheckBoxes_ServerValidate(object source, ServerValidateEventArgs args)
        {
            if (!EmailCourse.Checked && !SpecialReport.Checked)
                args.IsValid = false;
            else
                args.IsValid = true;

    }

ローカルサイトでこのフォームを使用しているページを開いて、どのように表示されるかを確認しようとすると、次のようなエラーが発生します。

説明:このリクエストを処理するために必要なリソースのコンパイル中にエラーが発生しました。以下の特定のエラーの詳細を確認し、ソースコードを適切に変更してください。

コンパイラエラーメッセージ:CS1061:「ASP.common_controls_specialreportform_ascx」には「validateCheckBoxes_ServerValidate」の定義が含まれておらず、「ASP.common_controls_specialreportform_ascx」タイプの最初の引数を受け入れる拡張メソッド「validateCheckBoxes_ServerValidate」が見つかりませんでした(usingディレクティブまたはアセンブリリファレンス?)

と:

エラーCS1061:「ASP.common_controls_specialreportform_ascx」に「validateCheckBoxes_ServerValidate」の定義が含まれておらず、「ASP.common_controls_specialreportform_ascx」タイプの最初の引数を受け入れる拡張メソッド「validateCheckBoxes_ServerValidate」が見つかりませんでした(usingディレクティブまたはアセンブリ参照がありませんか? )。

このエラーの原因を知っている人はいますか?私はasp.netを初めて使用し、これに問題があります。

ありがとう!

4

4 に答える 4

2

ur aspx.csにあるはずのときに、validateCheckBoxes_ServerValidateを*.ascx.csに配置します。ascx.csでは、このように親にあるコントロールを参照することはできません。

このコードをuraspx.csファイルに配置します。

protected void validateCheckBoxes_ServerValidate(object source, ServerValidateEventArgs args)
{
        if (!EmailCourse.Checked && !SpecialReport.Checked)
            args.IsValid = false;
        else
            args.IsValid = true;

}

編集:

ascxのカスタムバリデーターは次のようになります。

<asp:CustomValidator id="CustomValidator1" runat="server" ErrorMessage="No checkbox  checked" ControlToValidate="EmailCourse" OnServerValidate="validateCheckBoxes_ServerValidate"/>

このControlToValidate属性がないと、サーバーはどのコントロールを検証したいかわかりません。

Edit2:

<input type="checkbox"/>に変更を使用しようとしました<asp:CheckBox />か?btnをクリックした後、またはチェックボックスをオン/オフにした後、これをどのように検証する必要があるか教えてください。

Edit3:

.ascx.designer.csでEmailCourseが適切なタイプになっていることを確認してください。

Edit4:

<asp:CheckBox .../>あなたがあなたのファイルに持っているとき、あなたはあなたの このタイプ*.ascxにあるべきですascx.designer.csprotected global::System.Web.UI.WebControls.CheckBox EmailCourse

これが役に立ったら教えてください。

于 2012-06-18T09:50:54.800 に答える
1

Qsあなたの質問は答えられているようです、私はあなたがより少なく書くことができる方法をあなたに示したいです

protected void validateCheckBoxes_ServerValidate(object source, ServerValidateEventArgs args)
{
args.IsValid = (!EmailCourse.Checked && !SpecialReport.Checked);
}

これはあなたが書いたものと同じですが、これは一行にあります

于 2012-06-18T10:54:45.823 に答える
0

わかった。だからここにうまくいったものがあります:

harry180が示唆したように、input-type = "CheckBox"をasp:CheckBoxに切り替える必要がありました。

これにより実行時エラーが発生しましたが、これについては上記でコメントしました。実行時エラーは、ascs.designer.csファイルを変更するために、変更を加えた後にソリューションを再コンパイルしなかったことが原因でした。

再コンパイル後、コードは機能します。

于 2012-06-18T15:02:53.760 に答える
0

私はあなたが@user1463201をやろうとしたことの実用的な例を作りました

ここに.aspxがあります

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="ValidationExample._Default" %>

  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

   <html xmlns="http://www.w3.org/1999/xhtml">
   <head runat="server">
   <title></title>
   </head>
   <body>
      <form id="form1" runat="server">
        <div>
          <asp:ValidationSummary runat="server" ID="myValidationSummary" ValidationGroup="validation"/>
           <table>
             <tr>
                <td>
                  <asp:CheckBox runat="server" ID="cbxEmailCourse" Text="Email course" EnableViewState="True" AutoPostBack="True"/>
              </td>
            </tr>
            <tr>
              <td>
                <asp:CheckBox runat="server" ID="cbxSpecialReport" Text="Special report"/>
              </td>
           </tr>
           <tr>
              <td>
                <asp:TextBox Visible="False" Text="t" runat="server" ID="txtValid" ValidationGroup="validation"></asp:TextBox>
              </td>
              <td>
                <asp:Button runat="server" ID="btnValid" Text="Validate form" ValidationGroup="validation" OnClick="btnValid_Click"/>
                <asp:CustomValidator runat="server" ID="cValidator" ControlToValidate="txtValid" ValidationGroup="validation" OnServerValidate="cValidator_Validate"></asp:CustomValidator>
              </td>
          </tr>
      </table>
   </div>
  </form>
  </body>
 </html>

およびaspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace ValidationExample
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void cValidator_Validate(object source, ServerValidateEventArgs args)
        {
            args.IsValid = cbxEmailCourse.Checked && cbxSpecialReport.Checked;
        }

        protected void btnValid_Click(object sender, EventArgs e)
        {
            if (!Page.IsValid)
               Response.Write("Page are not Validate");
        }

    }
 }

私の仕事が誰かに役立つことを願っています:)楽しんでください

于 2012-06-18T21:57:01.040 に答える