1

我有一个控制器,它收到了一个 POST 回复,并且已经处理了用户请求的内容。然后我构建一个对象,现在,想要 RedirectToAction..

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

其中 r 是我正在使用的命名良好的对象。但在目标动作上,r 为空。

public ActionResult Index(LocationByAddressReply location)

现在,我在这里阅读了一些关于此的帖子,但我正在努力理解。

提出的一个选项是L

TempData["myObject"] = myObject;

但这似乎……很奇怪。不是类型安全的。这是传递对象最合适的方式吗?

4

3 回答 3

4

您可以通过两种方式做到这一点:

第一个选项,如果你有一个简单的模型

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

那个需要维护,考虑以后是否需要向模型添加属性。因此,您可以花哨并这样做:

第二种选择UrlHelper是你的朋友

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

第二种选择确实是正确的做法。model是您构建并希望传递给您的LocationController.

于 2013-04-05T04:44:15.980 回答
2

是的,您可以使用TempData重定向获取值。您的方法应如下所示:

public ActionResult YourRedirectMethod()

{
   TempData["myObject"]=r;
   return RedirectToAction() ("Index", "Location");

}

public ActionResult Index()
{
   LocationByAddressReply location=null;
   if(TempData["myObject"]!=null)
    {
          location=(LocationByAddressReply)TempData["myObject"];
    }
}

通过这种方式,您可以获得先前在重定向方法上设置的模型值。

于 2013-04-05T04:23:19.943 回答
1

我不认为 usingTempData是正确的解决方案,请参阅此答案。相反,您可以传递一个由您的对象组成的匿名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 回答