この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 17049|答える: 2

[ASP.NET] System.ArgumentException: 回发或回调参数无效。在配置中使用 < pages enableEven

[リンクをコピー]
掲載地 2015/04/21 15:56:12 | | |
同じページでGridviewコントロールの使用に関しては、更新イベントにサーバーが応答できず、エラーアラームが発生し、その後いくつかの情報をクエリするようです。解決策は次のようにまとめられます:更新イベントをクリックしても、ポストバックやコールバックパラメータが無効であるため応答できません。 イベント検証は、ページ上で<pages enableEventValidation="true"/>または<%@ Page EnableEventValidation="true" %>で有効化されます。 セキュリティ上の理由から、この機能はポストバックやコールバックイベントのパラメータが元々それらをレンダリングしたサーバー制御から発信していることを検証します。 データが有効かつ期待される場合は、Clientscripを使ってtManager.RegisterForEventValidationメソッドを削除し、ポストバックやコールバックデータを検証のために登録します。
説明:現在のウェブリクエストの実行中に未処理の例外が発生しました。 スタックトレース情報でエラーの詳細や、エラーの発生源をコード内で確認してください。
         例外詳細:System.ArgumentException:ポストバックまたはコールバックパラメータが無効です。 イベント検証は、<ページ上で enableEventValidation="true"/> または <% @ Page EnableEventValidation="true" %> で設定時に有効化されます。 セキュリティ上の理由から、この機能はポストバックやコールバックイベントのパラメータが元々レンダリングしたサーバー制御から発信していることを検証します。 データが有効かつ期待される場合は、Clientscripを使ってtManager.RegisterForEventValidationメソッドを削除し、ポストバックやコールバックデータを検証のために登録します。

       長い間見てみましたが問題は見つからず、コードを再度確認するのが正しいと判断しました。ページ上のすべてのコントロールのIDや属性も確認しましたが、それでも問題は見つかりませんでした。 後で知ったのは、こういうことでした:

発生条件:
1. 画面上に隠された操作があります。
2. 複数のグリッドビューバインディング。

3. 複数の形態で入れ子になっている。
原因:
. .NETは最終ページに__EVENTVALIDATION隠しフィールドを生成します。これはページの出力要素に基づいています。 簡単なテストが行われた。 <asp: button id="btnSubmit" runat="server" text="Submit" tooltip="Submit" />を作成し、対応するClickイベントハンドラを作成します。 プログラムを実行し、イベントに正しく対応してください。 次にbtnSubmit.Visable=falseを設定し、ページに手動で<input type="submit" name="btnSubmit" value="Submit" />を追加します。 プログラムを実行すると、EnableEventValidationの内容を含む例外が表示されます。 <@Page EnableEventValidation="false" を設定し>イベントに正しく応答するためにプログラムを再度実行します。 前後の両__EVENTVALIDATION内容を観察すると、それぞれ異なることがわかります。 例外が発生する場合、btnSubmitは出力に含まれていないと考えられますが、バックグラウンドに提出されると対応するコンテンツがあり、これは一貫性がないため、イベント検証の場合は有効化されます。 .NETは例外を投げます。

解決策1:
Page_Load(オブジェクトセンダ、EventArgs e)
{
    もし(! ページ・イズポストバック)
    {
        データをバインドする;
    }
}
解決策2:
<pages enableEventValidation="false"/>

1. ページの<%@ページ言語="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>にEnableEventValidation="false"を追加します。 (まず第一に)

2. web.configを通す
<system.web>
<pages enableEventValidation="false"/>

3. これはフォームのネストであり、ページは1つのフォームしか持てず、コードを慎重に確認することで解決できます。

4. ページにDropDownListやListBoxなどのコントロールが含まれている場合、以下の理由が原因となる可能性があります。

4.1 ドロップダウンメニューでのajax使用は、州および都市のリンクメニューでよく見られます。これは、ドロップダウンメニューの初期アイテム値がaspxページに割り当てられ、イベントが投稿された際にエラーが出て、ドロップダウンメニューの初期値が削除され、アイテムアイテムがバウンドイベントに追加されるためかもしれません。
4.2 その理由は、DropDownListコントロールのListItemのValueプロパティに中国語の文字が含まれているためです。 値を英語か数字に変更するだけです。 web.configに以下の文を追加するのが最善です:
<グローバリゼーションリクエストEncoding="utf-8" responseEncoding="utf-8" culture="zh-CN" uiCulture="zh-CN"/> POSTBACKはUTF-8でエンコードされていないため、JAVAscripでtを削除することは問題とみなされます。
requestEncoding="utf-8"に変更すればいいですが、responseEncoding="utf-8"は変更されません

5. イベント検証登録
原則として、asp.net このポストバック値を記録させることです。
RegisterForEventValidationはレンダリング時に呼び出される必要があります。






先の:天河2号は内部者への買収禁止:米国は中国のスーパーコンピューティング能力を羨む
次に:プロフェッショナリズム「キャリアプランテンプレート」
 地主| 掲載地 2015/04/22 10:36:18 |
  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="test1.aspx.cs" Inherits="WebApplication1.test1" enableEventValidation="false" %>
コードをコピーします


掲載地 2015/04/22 10:40:46 |
上の方の意見に同意しますが、EnableEventValidation="true"はローカルで検証しCPUを消費します。 EnableEventValidation="false" はサーバー検証を返し、ページを再読み込みます。
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com