しばらくの間、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: 誰もこれに対する答えを知らないようです..これを行う方法がないということですか、それともあなたが知らないだけですか?