【问题标题】:How to pass single parameter in RedirectToAction to different controller in ASP .NET MVC?如何将 RedirectToAction 中的单个参数传递给 ASP .NET MVC 中的不同控制器?
【发布时间】:2021-05-26 15:32:27
【问题描述】:

我知道,之前有人问过类似的问题。但我找不到完全相同的案例。 我想将模型对象返回 RedirectToAction() 传递给另一个控制器中的方法。 我的代码:

  MyModel mdl_obj=new MyModel();
  return RedirectToAction("mthdInAnotherController", "AnotherControllerName",new { mdl_obj = mdl_obj });

我正在为模型对象分配一些值并将其发送到另一个控制器中的方法。 但是该方法有不止一个论点,我没有通过这些论点。通过时,模型对象不为空,但在另一个控制器中,我得到模型对象的空值。可能是什么原因?

【问题讨论】:

  • this 有帮助吗?
  • 请提供目标控制器的签名。

标签: c# .net asp.net-mvc


【解决方案1】:

您首先需要检查模型类是否在您的 HTML 视图中声明,如下所示:

@model MyModel

没有它,视图无法绑定来自控制器的数据。

视图中声明的模型类必须与控制器方法返回的类匹配:

[HttpGet]
public ActionResult mthdInAnotherController(string param1, string param1, ..., paramN)
{
    MyModel = new MyModel();
    // populate model here
    ...
    ...
    return View(myModel);
}

还要检查调用的控制器方法是否与 RedirectToAction() 参数对象中的输入参数名称匹配:

return RedirectToAction("mthdInAnotherController", "AnotherControllerName", 
    new { 
        param1 = val1, param2 = val2, ... ,paramN = valN 
    });

【讨论】:

    【解决方案2】:

    TempData 适用于这种情况。 TempData 用于将数据从视图传输到控制器,从控制器传输到视图,或者从一个操作方法传输到相同或不同控制器的另一个操作方法。

    用法是

        public ActionResult Foo()
        {
            // Store data into the TempData that will be available during a single redirect
            TempData["Model"] = new MyModel();
        
            // If you store something into TempData and redirect to a controller action that will be available to consume the data
            return RedirectToAction("bar");
        }
        
        public ActionResult Bar()
        {
            var mdl_obj = TempData["Model"];
            ...
        }
    

    参考: ViewBag, ViewData and TempData

    【讨论】:

    • 感谢您的回答。我使用 Session 变量解决了我的问题。但是是的,TempData 也可以。
    • 如果您在以后的请求中不需要模型,会话变量是最后的选择。始终避免使用会话。会消耗服务器的内存,如果用户太多就会出问题。
    • 好的@Epic Chen,我会记住的。谢谢
    • 您不想将return RedirectToAction("bar"); 大写以返回RedirectToAction("Bar");
    • 你试过了吗?这是相同的。此外,重点在于方法。有时,程序员会希望 url 保持小写。
    猜你喜欢
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    • 2022-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多