【问题标题】:call controller and action method and pass model values调用控制器和动作方法并传递模型值
【发布时间】:2011-09-25 10:11:06
【问题描述】:

我在这里调用另一个控制器和操作方法

    [HttpPost]
    public ActionResult Index(LoginModel loginModel)
    {
        if (ModelState.IsValid)
        { some lines of code . bla bla bla
          return RedirectToAction("indexaction","premiumcontroller");
        }
    }

现在,premiumcontroller 的 indexaction 现在执行了。

如何将 loginmodel(或 loginmodel 对象)的值传递给高级控制器?我想不通。谢谢。

我正在使用 asp.net mvc 3。

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3


    【解决方案1】:

    您可以使用 new 关键字在控制器操作中传递值...

    return RedirectToAction(
        "indexaction",
        "premium", 
        new {
            Id = loginModel.Id,
            UserName = loginModel.UserName,
            Password = loginModel.Password   
        }
    );
    

    在你的另一个控制器中

    public ActionResult indexaction(int id, string uName, string paswrd)
    {
        // do some logic...
    }
    

    【讨论】:

      【解决方案2】:

      您可以将它们作为查询字符串参数传递:

      return RedirectToAction(
          "index",
          "premium", 
          new {
              id = loginModel.Id,
              username = loginModel.Username,
          }
      );
      

      premium控制器的index动作内部:

      public ActionResult Index(LoginModel loginModel)
      {
          ...
      }
      

      另一种可能是使用TempData:

      [HttpPost]
      public ActionResult Index(LoginModel loginModel)
      {
          if (ModelState.IsValid)
          { 
              // some lines of code . bla bla bla
              TempData["loginModel"] = loginModel;
              return RedirectToAction("index", "premium");
          }
          ...
      }
      

      premium控制器的index动作内部:

      public ActionResult Index()
      {
          var loginModel = TempData["loginModel"] as LoginModel;
          ...
      }
      

      【讨论】:

      • @patel.milanb,不,我们不能在这里使用 ViewData。有一个重定向。除此之外,我建议不要使用任何 ViewData。
      • 它可以工作,但网址看起来像这样localhost:61852/premium?UserName=ronald&Password=123456我怎样才能删除它?
      • @user963499,你不能删除它。如果您删除它,您将无法再获取索引操作中的任何数据。作为替代方案,您可以将 LoginModel 存储到数据库中,然后在重定向时仅发送查询字符串中的 id:返回 RedirectToAction("index", "premium", new { id = someId });。现在 url 将如下所示:localhost:61852/premium?id=1234 在 index 操作中,您将使用此 id 从数据库中取回模型。或者使用TempData,如我的第二个示例所示。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-27
      • 2011-04-01
      • 1970-01-01
      相关资源
      最近更新 更多