3


0

ASP.NET MVC PartialViewポストバック:データを検証する方法?

この例のようにASP.NET部分ビューを使用しています

<% using (Html.BeginForm()) { %>


        <%= Html.LabelFor(model => model.PersonName)%>

<%= Html.TextBoxFor(model ⇒ model.PersonName)%> <%= Html.ValidationMessageFor(model ⇒ model.PersonName、 "*")%>

…​

<%= Html.ValidationSummary(false)%>

<%}%>

私はjqueryコードを使用してそれらを呼び出すJqueryダイアログでこれらの部分ビューを表示します

$.ajax({
    type: "get",
    dataType: "html",
    url: urlAction,
    data: {},
    success: function(response) {
        $("#panelDetail").html('').html(response).dialog('open');
    }
});

すべてが機能し、私を幸せにします。 jquery ajaxを使用してフォームを送信することもできます。これにより、さらに嬉しくなります。 :)

本当にうっとうしいのは、検証がどこで発生するかを理解していなかったということです。検証が行われると、ページが完全に更新され、ダイアログが閉じます。

誰かがこれを助けることができると確信しています。 とにかく…​誰になりますか? :)

前もって感謝します!

編集

これは、いくつかのコードを含むコントローラーアクションシグネチャです

[HttpPost]
public ActionResult MyAction(FormCollection form) {
    string foroID = form["ForoId"];
    string foro = form["Foro"];
    string authorityId = form["AuthorityId"];
    string sezione = form["Sezione"];
    ...
}

検証するにはモデルクラスを再作成する必要がありますか?

2 回答


3


まず:クライアント検証を使用している場合、最初のチェックは既にJavaScriptを使用してクライアント側で行われていますが、データの入力中に検証でエラーが表示されます。

  • 2番目*:コントローラーアクションに送り返されるデータは、アクションがモデルタイプとして「PartialView」が持っているのと同じタイプのパラメーターを取る限り、その特定のポイントで検証されます。 このタイプ(クラス)にプロパティに添付されたデータ注釈がある場合、それらは検証されています。 もちろん、アクションのモデルエラーもチェックし、それに応じて行動する必要があります。

*リダイレクト?*コントローラーアクションのコードをさらに提供する場合、何が起こっているかをより簡単に確認し、追加のヘルプを提供できます。

この状況にどう対処したか

モデル状態エラーをチェックし、エラーの説明とともにクライアントに400を返す特別なアクションフィルターを作成しました。 私のAjax呼び出しはすべて「成功」と「エラー」の応答を処理し、それに応じて動作します。

コードhttps://stackoverflow.com/questions/2261617 [こちら(質問と解決策)]を確認してください。

実際の解決策

_ _このソリューションは、以下のコメントから得られた追加情報に基づいています __

そのため、議論の後の問題は、実際には全ページのポストバックではなく、検証がまったく発生しなかったことです。 その理由は、コントローラーのアクションがタイプ `FormCollection`のパラメーターを取ることです。 MVCフレームワークには、そのデータを検証する方法を知るための知識がないため、検証は行われません。

必要な変更は、このパラメーターのタイプを変更して、ストロングタイプビューに一致させることです。 ビューのタイプが ViewPage`の場合、 HttpPost`アクションにはおそらく同じタイプのパラメーターが必要です。

一般に、アクションタイプは任意のタイプのパラメーターを持つことができます。 はい、さらに多くのパラメータを持つことができます。 唯一の制限は、デフォルトのモデルバインダーが投稿されたデータをこれらのパラメーターに関連付けることができることです。 ここがあなたの出番です。 あなたがしなければならないのは、パラメータに適切な名前を付けることだけで、モデルバインダーが残りを行います。

これが簡単にできない特定の状況に出くわした場合、特定のタイプのカスタムモデルバインダーをいつでも作成でき、投稿されたデータを解析する方法は完全にあなたにあります。


1


ダイアログボックスを閉じる前に、ダイアログを閉じる前にajaxを介してフォームを送信するときにサーバーの応答を確認し、「dialog( 'close' ) `ダイアログの。 ダイアログの他のすべての状況でも同じです。