8

カスタマイズなしで、MVC 3 でこのようなことを行うことはできますか?

    [HttpGet]
    public ViewResult MyAction(ViewModel model)
    {
        // Do stuff
        return View("ViewName", model);
    }

これを行う理由は、ワークフローの一部として異なるページ間でデータを渡すためです。(つまり、ユーザーがステップ 1 で必要なものを完成させたら、フォーム データをステップ 2 に渡します...)

4

7 に答える 7

10

モデルクラスのプロパティ名と同じパラメータ名を持っている限り、機能します

あなたのクラスがこのようなものであると仮定します

public class ViewModel
{
  public string Name { set;get;}
  public string Loc{ set;get;}
}

このようなGetリクエストを行うことができます

MyAction?Name=jon&Loc=America
于 2012-08-15T19:39:30.920 に答える
1

Web API 2 の場合:

[HttpGet]
public ActionResult Get([FromUri]ViewModel model)
{
    // Do stuff
    return View("ViewName", model);
}
于 2015-11-27T15:41:39.003 に答える
1

あなたならできます。クエリ文字列内のすべての値を、名前が一致するプロパティに自動的にバインドします。

とはいえ、それは一般的に行われていることではありません。[HttpPost]2 つのアクションのインターフェイスが何らかの形で異なる必要があるため、モデル バインディングが実行されるメソッドです。別のアクション名にポストバックすることで解決できますが、モデルの (部分的な) 読み込みでモデル検証エラーが発生する可能性があり、ユーザーを混乱させる可能性があります。

于 2012-08-15T19:35:03.537 に答える
0

PostMethodget属性を設定することにより、getにフォームを投稿できます。フォームの入力フィールドが受け入れのいずれかに一致する場合、ViewModelそれらは入力されます。これらの一致はname、入力(<input name="MatchedField">-> public string MatchedField { get; set; })のフィールドによって決定されます。

投稿からフォームを渡してから、投稿アクションから取得にリダイレクトする必要があります。このパターンはベストプラクティスであり、Post-Redirect-Getパターンとして知られています。

于 2012-08-15T19:34:04.843 に答える
0

私はこのアプローチに反対することをお勧めします。POST のみを使用するのが最善の解決策です。GET を使用する場合、ステップ 3 からステップ 2 に戻ってブラウザのキャッシュが利用できない場合、古いバージョンのViewModel. GET を使用する特別な理由はありますか?

于 2012-08-15T19:37:57.653 に答える
0

QueryString を使用して値を渡すことはお勧めできません。以下のいずれかを使用できます: このコードは、指定されたモデルで部分ビューをレンダリングします。必ずモデルをビューに追加してください。ビューはSharedフォルダーに配置する必要があります

public ActionResult myaction(ViewModel model)
        {

            return PartialView("anotherView", model);
        }

ほぼ同じことを行う別の方法:

 public ActionResult myaction(ViewModel model)
        {
            return View("someAnotherView", model);
        }

ビューが同じコントローラーにない場合は、次のようなビュー名のパスを使用します"../Controller/viewName"

TempData を使用して実行できる別のアプローチもあります。

public ActionResult myaction(ViewModel model)
        {
            TempData["model"] = model;
            return RedirectToAction("someAnotherView");
        }

ただし、以下に示すコードを使用して、ビュー内のデータに到達する必要があります。

   @{
    ViewModel model=(ViewModel)TempData["model"];

    }

上記のいずれかが役立つことを願っています..

よろしく

于 2012-08-15T22:07:56.910 に答える