1

しばらくの間、MVC のさまざまな側面をいじっていましたが、問題を解決する最善の方法がわからない状況に達しました。SOコミュニティがここで私を助けてくれることを願っています:P

インターネット上で Ajax.BeginForm の例をいくつか見てきましたが、これは非常に気の利いたアイデアのように思えます。たとえば、顧客を選択するドロップダウンがあり、顧客を選択すると、この顧客の詳細がページのプレースホルダーに読み込まれます。これは完全に正常に機能します。

しかし、ボックスに何らかの検証を結び付けたい場合はどうすればよいでしょうか?

仮説として、記事ページを想像してみてください。ユーザーのコメントはその下に表示されます。コメント領域の下には、ajax-y の「コメントを追加」ボックスがあります。ユーザーがコメントを追加すると、コメント領域の最後のコメントの下に表示されます。

呼び出しの結果をコメント領域に追加するように Ajax.BeginForm を設定すると、正常に動作します。しかし、投稿されたデータが有効でない場合はどうなるでしょうか。コメント領域に「成功」​​コメントを追加する代わりに、ユーザー検証エラーを表示する必要があります。

この時点で、Ajax.BeginForm の内側の領域がパーシャルの内側になり、フォームの送信がこのパーシャルを返すと判断しました。検証は正常に機能します。送信するたびに、フォーム要素内のコンテンツをリロードします。しかし、成功したコメントを一番上に追加するにはどうすればよいでしょうか?

その他の考慮事項: コメント フォームには [プレビュー] ボタンもあります。ユーザーが [プレビュー] をクリックすると、レンダリングされたコメントがプレビュー ボックスに読み込まれます。これはおそらくフォーム領域内にもあります。

代わりに Json の結果を使用することを考えていました。ユーザーがフォームを送信すると、サーバー コードは、Success 値を持つ Json オブジェクトを生成し、一部のプロパティとして html レンダリング パーシャルを生成します。何かのようなもの

{ "success": true, "form": "<html form data>", "comment": "successful comment html to inject into the page" }

これは完全な解決策ですが、MVC にはコントローラー内でパーシャルを文字列にレンダリングする方法がありません (コンテキストの分離、覚えていますか?)。

UPD: 誰もこれに対する答えを知らないようです..これを行う方法がないということですか、それともあなたが知らないだけですか?

4

2 に答える 2

0

ここでは、jQuery を使用して投稿する方法と、検証でエラーを処理する方法の例を示します。

http://jvance.com/blog/2010/02/20/MakingAnAjaxFormWithJQueryInASPdotNETMVC.xhtml

于 2010-11-01T12:26:44.973 に答える
0

MVC についてさらに検討し、さらに経験を積んだ後、問題を分析することにし、次の結論に達しました。誰かがそれを役に立つと思うかどうかわからない

  1. フィールドの検証を必要とする Ajax.BeginForm では、送信からの戻りはフォームの html を返す必要があります。このようにして、検証が失敗した場合、応答にはエラー メッセージが含まれ、インターフェースはシームレスに見えます。結果には、フォームの宣言を含むフォーム全体が含まれる可能性が高くなります。

  2. この場合のプレビューは単純な問題です。ユーザーがプレビュー ボタンをクリックすると、フォームが投稿され、結果には入力されたフォームとプレビュー ボックスが含まれます。または、プレビュー ボタンを Ajax.LinkBut​​ton にすることもできます。これは、フォームをシリアル化し、データをサーバーにポストして、コメントにレンダリングします。クライアント側の js は、このプレビューを必要なコンテナーに入れます。

  3. 送信が成功すると、要件とレイアウトに応じて、いくつかのオプションがあります。
    a)フォーム送信の結果は、コメント + 空白のフォーム (新しいコメントの準備ができている) を返すことができます。たとえば、コメント フォームがすべてのコメントの下にある場合、コメントがフォームの下部に追加されたかのように見えます。
    b)結果には、空白のフォーム + コメント領域を更新する/ページに最新のコメントをロードする小さな js スクリプトを含めることができます
    c)親ページを強制的に更新して、新しく投稿されたコメントがすぐに表示されるようにすることもできますユーザーに表示されます。

    基本的に、この選択は特定のケースの要件によって異なります。

于 2011-02-16T22:37:00.213 に答える