21

アクションにリダイレクトしようとしたとき、受け取ったときにパラメーターは常に null です ? なぜこのようなことが起こるのかわかりません。

ActionResult action1() {
    if(ModelState.IsValid) {
        // Here user object with updated data
        redirectToAction("action2", new{ user = user });
    }
    return view(Model);
}

ActionResult action2(User user) {
    // user object here always null when control comes to action 2
    return view(user);
}

そして、これで私は別の疑問を持っています。route で action にアクセスしたところ、 でしか値を取得できませんでしたRouteData.Values["Id"]。ルーティングされた値はパラメーターに送信されません。

<a href="@Url.RouteUrl("RouteToAction", new { Id = "454" }> </a>

ここで私はconfigureを見逃していますか?または私が見逃しているもの。

ActionResult tempAction(Id) {
    // Here Id always null or empty..
    // I can get data only by RouteData.Values["Id"]
}
4

1 に答える 1

38

そのような URL で複雑なオブジェクトを渡すことはできません。その構成部分を送信する必要があります。

public ActionResult Action1()
{
     if (ModelState.IsValid)
     {
           // Here user object with updated data
           return RedirectToAction("action2", new { 
               id = user.Id, 
               firstName = user.FirstName, 
               lastName = user.LastName, 
               ...
           });
     }
     return view(Model);
}

また、コードに示されているようにreturn RedirectToAction呼び出すだけでなく、を追加したことにも注意してください。RedirectToAction

しかし、はるかに優れた方法は、ユーザーの ID のみを送信することです。

public ActionResult Action1()
{
     if (ModelState.IsValid)
     {
           // Here user object with updated data
           return RedirectToAction("action2", new { 
               id = user.Id, 
           });
     }
     return view(Model);
}

ターゲット アクションでは、この ID を使用して、このユーザーが保存されている場所 (データベースなど) からユーザーを取得します。

public ActionResult Action2(int id)
{
    User user = GetUserFromSomeWhere(id);
    return view(user);
}

いくつかの代替アプローチ (ただし、推奨または使用しないもの) は、オブジェクトを TempData に永続化することです。

public ActionResult Action1()
{
     if(ModelState.IsValid)
     {
           TempData["user"] = user;
           // Here user object with updated data
           return RedirectToAction("action2");
     }
     return view(Model);
}

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

public ActionResult Action2()
{
    User user = (User)TempData["user"];
    return View(user);
}
于 2013-10-18T06:59:54.073 に答える