1

POST を受信したコントローラーがあり、ユーザーが要求したものを処理しました。次に、オブジェクトを作成し、RedirectToAction..

return RedirectToAction() ("Index", "Location", r);

ここで、r は私が使用している適切な名前のオブジェクトです。しかし、ターゲット アクションでは、r は null です。

public ActionResult Index(LocationByAddressReply location)

今、私はこれについてここでいくつかの投稿を読みましたが、理解するのに苦労しています.

提案されたオプションはLでした

TempData["myObject"] = myObject;

しかし、それは...奇妙に思えます。タイプセーフではありません。これはオブジェクトを渡すのに最も適した方法ですか?

4

3 に答える 3

4

これは、次の 2 つの方法で行うことができます。

最初のオプション、単純なモデルがある場合

return RedirectToAction("Index", "Location", new { Id = 5, LocationName = "some place nice" }); 

これにはメンテナンスが必要です。後でモデルにプロパティを追加する必要があるかどうかを検討してください。だから、あなたは空想的で、次のようにすることができます:

2番目のオプションは、UrlHelperあなたの友達です

return Redirect(Url.Action("Index", "Location", model));

2 番目のオプションは、実際には正しい方法です。modelは、作成して に渡したいオブジェクトですLocationController

于 2013-04-05T04:44:15.980 に答える
1

TempData使用が正しい解決策ではないと思います。この回答を参照してください。代わりに、オブジェクトで作成された匿名オブジェクトを渡すことができrます。たとえば、次のような場合:

public class UserViewModel 
{
    public int Id { get; set; }
    public string ReturnUrl { get; set; }
}

public ActionResult Index(UserViewModel uvm) 
{ 
    ...
}

次のように渡すことができますUserViewModel

public ActionResult YourOtherAction(...)
{
    ...
    return RedirectToAction("Index", "Location", new 
                                                 { 
                                                     id = /*first field*/,
                                                     returnUrl = /*second field*/ 
                                                 });
}

ASP.NET MVC は、これを解析して、動作中の引数として期待しているオブジェクトにしますIndex。を使用するためにコードをまだ切り替えていない場合は、試してみてくださいTempData

于 2013-04-05T04:50:31.270 に答える