0

アプリケーションで候補者のプロファイルを作成する必要がある機能を構築しようとしています。候補者のプロフィールを作成するには、2 つのステップ/UI があります。

1 - ユーザーが候補者の情報を入力するテンプレートを作成します。

2 - プレビュー テンプレート...システムにプロファイルを追加すると、プロファイルがどのように表示されるかのプレビューがユーザーに表示されます。

いくつかのアクション メソッドを含む「CandidateController」と呼ばれるコントローラーを介して、これらの UI をサポートするビューを既に作成しています。

1- [HttpGet] Create テンプレートを返す「Create」。

[HttpGet]
public ViewResult Create()

2- [HttpPost] Preview テンプレートを返す「Preview」。

 [HttpPost]
 public ActionResult Preview(ProfileViewModel viewModel)

ここで実装する必要があるのは、Create テンプレートに、コントローラーでアクション メソッド [HttpPost] Preview を呼び出すボタン/リンクを配置することです。

課題 また、最初の作成テンプレートから HttpPost プレビュー アクション メソッドを呼び出すことができる場合、モデル バインダーが ViewModel オブジェクトを読み込む方法があるかどうかも疑問に思っています。

この種の機能を最適に実現するための提案/ヘルプを探しています。

どんな助けでも大歓迎です。

4

2 に答える 2

3

課題 また、最初の作成テンプレートから HttpPost プレビュー アクション メソッドを呼び出すことができる場合、モデル バインダーが ViewModel オブジェクトを読み込む方法があるかどうかも疑問に思っています。

標準フォームまたは AJAX 呼び出しを使用して Preview POST アクションを呼び出し、ビュー モデルのすべてのプロパティ値を渡すことができます。このリクエストで渡すすべての値は、デフォルトのモデル バインダーによってバインドされる値になります。これは、デフォルトのモデル バインダーが、リストや辞書などのより複雑な構造のパラメーターに名前を付ける方法を説明する記事です。

AJAX の例:

$.ajax({
    url: '@Url.Action("Preview")',
    type: 'POST',
    data: { Prop1: 'value 1', Prop2: 'value 2' },
    success: function(result) {
        // TODO: do something with the result returned from the POST action
    }
});

AJAX を使用したくない場合は、隠しフィールドを持つ標準フォームを使用できます。

@using (Html.BeginForm())
{
    @Html.Hidden("Prop1", "value 1")
    @Html.Hidden("Prop2", "value 2")
    ...
    <button type="submit">Preview</button>
}
于 2011-12-09T19:18:43.647 に答える
1

わかりましたので、ここに私が回避しなければならなかったオプションがあります:

  • Darin が提案したように、$.ajax(options) を使用して目立たない方法で行くことができますが、部分的なページ更新を行う場合、または更新/ダンプに取り組みたい場合にのみ、この方法を使用することをお勧めします。同じビューの新しい html。
  • また、Ajax を使用したくない場合は、隠しフィールドを使用する代わりに、MVC で TempData プロパティを使用するだけで済みます。これが、TempData を使用して目的の機能を実装した方法です。以下...

    [HttpPost]       
    public ActionResult Create(ViewModel viewModel)
    {
        this.TempData["profile"] = viewModel;
        return RedirectToAction("Preview");
    }
    
    
    public ActionResult Preview()
    {            
    
        if (TempData["profile"] != null)
        {
            return View((ViewModel)TempData["profile"]);
        }
    
        // Handle invalid request...
        return null;
    }
    

したがって、このソリューションは私にとって非常にうまく機能し、JavaScript や不要な HTML をまったく記述しませんでした。そして、私を出発点に導いてくれたダーリンに感謝します。

于 2011-12-12T18:51:22.030 に答える