12

html.actionlinkフォームの送信以外の方法で、または他の方法を使用してモデル全体を渡すにはどうすればよいですか?そのための方法やヒントはありますか?

4

3 に答える 3

18

複雑なケースではお勧めできませんが、それでも可能です。

public class QueryViewModel
{
  public string Search { get; set; }
  public string Category { get; set; }
  public int Page { get; set; }
}

// just for testing
@{
   var queryViewModel = new QueryViewModel
   {
      Search = "routing",
      Category = "mvc",
      Page = 23
   };
}

@Html.ActionLink("Looking for something", "SearchAction", "SearchController"
                  queryViewModel, null);

hrefこれにより、次のようなアクションリンクが生成されます。

/ SearchController / SearchAction?Search = routing&Category = mvc&Page = 23

これがあなたの行動です、

public ViewResult SearchAction(QueryViewModel query)
{
   ...
}
于 2012-07-22T14:10:38.837 に答える
4

いいえ、リンクやフォームを使用して複雑なオブジェクト全体を渡すことはできません。あなたが取ることができるいくつかの可能なアプローチがあります:

  • オブジェクトの個々のプロパティをクエリ文字列パラメーター(またはフォームを使用している場合は入力フィールド)として含めて、デフォルトのモデルバインダーがコントローラーアクションでオブジェクトを再構築できるようにします
  • IDのみをクエリ文字列パラメーター(またはフォームを使用している場合は入力フィールド)として渡し、コントローラーアクションにこのIDを使用してデータストアから実際のオブジェクトを取得させます
  • セッションを使用する
于 2012-07-22T06:50:56.133 に答える
1

javascriptを使用して、リンクのクリックを検出し、フォーム(または渡したいデータ)をシリアル化して、リクエストパラメーターに追加することができます。これはあなたが達成しようとしていることを達成するはずです...

于 2012-07-22T06:57:28.330 に答える