【问题标题】:Returning view with model and query string返回带有模型和查询字符串的视图
【发布时间】:2015-06-21 03:38:37
【问题描述】:

我正在尝试从同时具有查询字符串和模型的控制器返回视图

return View("BillingReport.aspx/?report=" + fc["report_selector"], bilDet);

但这给了我一个找不到页面的运行时错误,因为它在 url 的末尾附加了 .aspx 等。

RedirectToAction() 没有这样做的选项。
有没有办法做到这一点,或者 mvc3 是否限制我们使用查询字符串或模型

【问题讨论】:

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


    【解决方案1】:

    MVC 不支持您要查找的内容,

    但我不明白你为什么要重定向到带有 ModelValues 的 URL。

    任何重定向都是 GET 请求,因此您可以构建模型并从该操作返回视图。

    View() 需要一个与之关联的视图名称和模型。

    Redirect() 或 RedirectToAction() 用于将 url 重定向到另一个控制器/动作。所以你不能传递模型。即使你尝试传递模型,它也会将模型属性附加为查询字符串参数。

    【讨论】:

      【解决方案2】:

      这就是您想要使用模型和查询字符串的原因:查询字符串允许您为用户提供保存带有状态信息的 URL 的方法。该模型允许您传递大量未展平的数据。所以我认为如何在 MVC 5 中做到这一点(可能不适用于旧版本,但可能适用):

      对视图使用 2 个操作而不是 1 个操作。使用第一个通过 RedirectToAction 设置查询字符串。使用第二个动作将模型返回到视图。然后通过会话状态将模型从第一个动作传递到第二个动作。这是示例代码:

      public ActionResult Index(string email){
          Session["stuff"]=Load(email);
          return RedirectToAction("View1action", new { email = email, color = "red" });
      }
      
      public ActionResult View1action(string email){
          return View("View1",(StuffClass)Session["stuff"]);
      }
      

      【讨论】:

        【解决方案3】:

        我同意 Manas 的回答,如果我是你,我会考虑尽可能更改设计。
        作为旁注,以下技术是可能的:

        TempData["bilDet"] = bilDet;
        return RedirectToAction(....);   // your controller, action etc.
        

        在该操作上,您可以检索您的 TempData。 TempData 将被自动删除。

        但也请查看:ASP.NET MVC - TempData - Good or bad practice

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-11-21
          • 1970-01-01
          • 1970-01-01
          • 2016-07-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多