使用模型和查询字符串返回视图

时间:2012-02-23 17:47:56

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

我正在尝试从具有查询字符串和模型

的控制器返回查看
return View("BillingReport.aspx/?report=" + fc["report_selector"], bilDet);

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

RedirectToAction()没有选择这样做 有没有办法做到这一点或mvc3限制我们使用查询字符串或模型

3 个答案:

答案 0 :(得分:2)

MVC不支持你要找的东西,

但我不明白你为什么要用ModelValues重定向到一个URL。

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

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

Redirect()或RedirectToAction()用于将url重定向到另一个控制器/操作。因此,您无法传递模型。即使您尝试传递模型,它也会将模型属性作为查询字符串参数附加。

答案 1 :(得分:1)

以下是您希望使用模型和查询字符串的原因:查询字符串允许您为用户提供使用状​​态信息保存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"]);
}

答案 2 :(得分:0)

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

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

在操作中,您可以检索TempData。 TempData将自动删除。

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