1

別のコントローラーからアクション メソッドを呼び出そうとしていますが、機能していません。RedirectToAction をスキップするだけです

ここに私のコードがあります:

public ActionResult sendPolicy(TempPoliciesUpload TempPolicy)
        {
            return RedirectToAction("Insert", "Policies", new { tempPolicy = TempPolicy });
        }

助けてください。

4

6 に答える 6

10

リダイレクト時に複雑なオブジェクトを送信することはできません。各プロパティをクエリ文字列パラメータとして含める必要があります。そして、これは単にスカラープロパティでのみ機能します。

public ActionResult sendPolicy(TempPoliciesUpload TempPolicy)
{
    return RedirectToAction("Insert", "Policies", new 
    { 
        id = TempPolicy.Id,
        prop1 = TempPolicy.Prop1,
        prop2 = TempPolicy.Prop2,
        ...
    });
}

複雑なプロパティがある場合は、それらも含める必要があります。これにより、デフォルトのモデルバインダーが、クエリ文字列パラメーターからターゲットアクションでモデルをバインドできるようになります。

public ActionResult sendPolicy(TempPoliciesUpload TempPolicy)
{
    return RedirectToAction("Insert", "Policies", new RouteValueDictionary
    {
        { "id", TempPolicy.Id },
        { "prop1", TempPolicy.Prop1 },
        { "prop2", TempPolicy.Prop2 },
        { "prop3.subprop1", TempPolicy.Prop3.SubProp1 },
        { "prop3.subprop2", TempPolicy.Prop3.SubProp2 },
        ...
    });
}

とあなたのターゲットアクション:

public ActionResult Insert(TempPoliciesUpload TempPolicy)
{
    ...
}

もう1つの可能性は、リダイレクトする前にこのオブジェクトをバックエンドに保持してから、IDのみを渡すことです。

public ActionResult sendPolicy(TempPoliciesUpload TempPolicy)
{
    int id = Repository.Save(TempPolicy);
    return RedirectToAction("Insert", "Policies", new { id = id });
}

そしてあなたのターゲットアクションで:

public ActionResult Insert(int id)
{
    TempPoliciesUpload TempPolicy = Repository.Get(id);
    ...
}
于 2012-08-16T05:46:29.397 に答える
0

私はあなたが持っていることを願っています

public ActionResult Insert(TempPoliciesUpload tempPolicy)

PoliciesControllerクラスのアクションメソッド。

ここでRedirectToActionのオーバーロードを参照してください

于 2012-08-16T05:23:16.060 に答える
0

複雑なオブジェクトで最初のソリューションを試した人はいますか? 私はこれを意味します:

「...そしてあなたのターゲットアクション:...」

public ActionResult Insert(TempPoliciesUpload TempPolicy) { ... }

RouteValueDictionary が複雑なオブジェクトに変換またはキャストされるとは思いません。(シリアル化を使用する必要があると思います)

私の解決策は、パラメーターを RouteValueDictionary として渡し、各パラメーターをターゲット アクションで個別に受け取ることでした。

于 2013-11-05T17:50:24.363 に答える
0

複雑なオブジェクトを送信する必要がある場合は、次のように別のコントローラーからビューを返すだけで試すことができます。

public ActionResult sendPolicy(TempPoliciesUpload TempPolicy) { return View("~Views/Policies/Insert.cshtml", TempPolicy ); }

このビューを正しいコントローラー メソッドにポストバックする場合は、「BeginForm」Html ヘルパーでこれを指定する必要があります。

... @using(Html.BeginForm("Insert", "Policy") { ... }

これは実際にはベスト プラクティスではありませんが、リダイレクトを適切に使用できるようにアプリの残りの部分を十分に修正するまで使用できる回避策です。

于 2014-11-18T21:32:59.730 に答える
0

リダイレクト先のコントローラーからパラメーターを削除し、 を削除しますnew { tempPolicy = TempPolicy }。それが機能するかどうかを確認してください(そして、問題をパラメーターにローカライズしました)。

ほとんどの場合、リダイレクト先のアクションのタイプにキャストする必要があります(したがって、マークはその署名を求めました)、またはそれ以外の場合は、引用符で囲む必要があります(疑わしいですが、試してみてください)

それでもうまくいかない場合は、スペルを確認してください (これが私が魔法の文字列が好きではなく、 T4MVCが好きな理由です) - しかし、名前付けが正しいように見えるかどうかは疑わしいです。

別の可能性のある可能性は、ここで他の人のために解決したものです: RedirectToAction が機能しない

于 2012-08-16T04:04:30.287 に答える