2

私は非常に初歩的な質問があると思いますが、それは次のとおりです。

別のコントローラーへのリンクがあり、文字列のリストを渡したいです。

コントローラ:

[HttpPost]
public ActionResult Index(DateTime? dateFilter, int? Provider, int? middleOffice)
{
...
ViewBag.ReasonGroupName = new List<string>() { "Faults" };
...
}

意見:

@Html.ActionLink(item.username, "Edit", "Hours", new { IdUser = item.IdUser, ReasonGroupNames = (List<string>)ViewBag.ReasonGroupName }, new { @class = "iframeFull" })

私のコントローラーでViewBag.ReasonGroupNameは、適切に作成されます: インデックス 0 の項目 ([0]) を持つリストと文字列ですが、他のコントローラーでそれを受け取ると、代わりに"Faults"リストの 0 インデックス要素が付属します"System.Collections.Generic.List1[System.String]""Faults"

ViewBagオブジェクトの変更も試みViewDataますが、同じ問題が発生します。

私が間違っていることについて何かアイデアはありますか?

ありがとう

4

4 に答える 4

1

get-request で複雑なデータを送信しようとしています。最初に、リンクの制限をすぐに克服できるので、それはとにかく悪い考えです。

あなたには解決策があります:

  1. get-request の送信を続ける: リストを文字列にシリアル化する - 特別なシリアライザーを使用するか、string.Join(",", list); 編集メソッドは、特別なデシリアライザーまたはメソッドによってリストにデシリアライズする文字列を受け入れる必要がありますstring.Split。文字列に char ' 'を含めることができる場合、 string.Joinandの使用はstring.Splitお勧めできません。,

  2. データを送信しないでください。db/session に保存して、保存したデータの ID を送信できます。正確でなければなりません: db/session から古いデータを削除する必要がありますが、新しいデータは削除しないでください

  3. ポストリクエストを使用します。でフォームを作る@Html.BeginForm(...); for非表示の入力 ( @Html.HiddenFor(...)) を追加し、送信ボタンを追加してフォームに<input type="submit">リンクとしてスタイルを設定します。

于 2013-07-04T12:10:25.053 に答える
1

この@Html.ActionLink()メソッドは、指定されたコントローラー/アクションへの URL リンクを生成するために使用されます。したがって、リンクの URL で渡すことができるパラメーターのみを含めることができます。

したがって、URLでオブジェクトを渡すことはできないと思います。

于 2013-07-04T12:03:41.547 に答える
0

あなたの問題は、文字列のリストを渡そうとしていますが、ActionLink(). この List を選択した単一の書式設定された文字列に分解するには、小さなヘルパーを作成する必要があります。これは、(たとえば) カンマ区切りの文字列として URL に渡されます。次に、必要に応じてこれをリハイドレートしてリストに戻すために、コントローラー アクションでいくつかの魔法を実行します。

于 2013-07-04T12:03:06.820 に答える