在回顾了很多问题和互联网数据后,我已经解决了我的问题,正确地从MVC3应用程序获取URL参数。 事情是编码没有错,但在路由中(我对路由不太好......)。 这是当前的问题。
http://localhost:51561/Report/Details/1
这是我的应用程序呈现报告详细信息的方式,这很好。但是当它像这样,我无法从URL参数中获取值,就像这样
Request.QueryString["id"]
但是,当我手动输入网址http://localhost:51561/Report/Details?id=1
时,它可以正常工作......
我喜欢第一种URL类型,但我不知道如何从中获取参数...
请帮助......
更新
我的控制器操作:
public ViewResult Details(int id)
{
Report report = db.Reports.Find(id);
ViewBag.TestID = Request.QueryString["id"].ToString();
return View(report);
}
public ActionResult Show(int id)
{
Report report = db.Reports.Find(id);
var imageData = report.Image;
return (File(imageData, "image/jpg"));
}
我的观点:
<div class="display-label">Picture</div>
<div class="display-field">
<img alt="image" src="<%=Url.Action("Show", "Report", new { id = ViewBag.TestID })%>" width="200px" />
</div>
答案 0 :(得分:1)
你不应该在MVC中使用Request.QueryString["id"]
只需在您的id
操作中添加ReportController.Details
参数:
public ActionResult Details (int id)
以上假设您在Global.asax中设置了默认路由:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
答案 1 :(得分:1)
首先,您不应在应用程序中使用Request.QueryString
。除此之外,在第一个网址中,您没有查询字符串,因此您无法访问它(也请在msdn上阅读this article关于Request.QueryString
)。
我还建议您阅读ASP.NET MVC3的基本教程,找到here。很多像你的问题都在那里得到了彻底的解释。
要现在回答您的问题,在您的第一个网址示例中,网址中的1
是您操作的参数(详情操作)。您必须将此参数添加到方法(操作):
public ActionResult Details(int id)
更新:
你显然有正确的行动(方法)声明。现在,您只需使用参数id
即可。因此,仅使用变量(参数)Request.QueryString["id"]
更改id
。
public ViewResult Details(int id)
{
Report report = db.Reports.Find(id);
ViewBag.TestID = id;
return View(report);
}
无需在ID上应用ToString()
,在没有必要的情况下也不应该这样做(您可能需要在其他地方使用它,之后或之后)。只需将其作为原始类型放入ViewBag
。
您的Show()
方法很好:)。您现在可以根据需要使用id
参数。 (尽量避免使用太多的括号,这会使它看起来很乱,现在很清楚。)
public ActionResult Show(int id)
{
Report report = db.Reports.Find(id);
var imageData = report.Image;
return File(imageData, "image/jpg");
}