Asp.net mvc MVC3 URL替代方案
在回顾了大量的问题和互联网数据之后,我解决了一个问题,即正确地从MVC3应用程序中获取URL参数。 问题是在编码方面并没有错误,但在路由方面(我不太擅长路由…)。 这是当前的问题Asp.net mvc MVC3 URL替代方案,asp.net-mvc,url-rewriting,url-routing,Asp.net Mvc,Url Rewriting,Url Routing,在回顾了大量的问题和互联网数据之后,我解决了一个问题,即正确地从MVC3应用程序中获取URL参数。 问题是在编码方面并没有错误,但在路由方面(我不太擅长路由…)。 这是当前的问题 http://localhost:51561/Report/Details/1 这是我的应用程序显示报告详细信息的方式,这很好。但当它这样做时,我无法从URL参数中获取值,就像这样 Request.QueryString["id"] 但是,当我手动输入URLhttp://localhost:51561/Report
http://localhost:51561/Report/Details/1
这是我的应用程序显示报告详细信息的方式,这很好。但当它这样做时,我无法从URL参数中获取值,就像这样
Request.QueryString["id"]
但是,当我手动输入URLhttp://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>
图片
“width=”200px“/>
您不应该在MVC中使用Request.QueryString[“id”]
只需将id
参数添加到您的ReportController。详细信息
操作:
public ActionResult详细信息(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
);
首先,您不应该在应用程序中使用
Request.QueryString
。除此之外,在第一个URL中,您没有查询字符串,因此无法访问它(请参阅msdn上关于Request.QueryString
)
我还想建议您阅读ASP.NET MVC3的基础教程,您可以在这里找到。许多问题都在这里得到了详细的解释
现在要回答您的问题,在您的第一个URL示例中,URL中的1
是您的操作(细节操作)的参数。您必须将此参数添加到您的方法(操作):
更新:
显然,您的操作(方法)声明是正确的。现在,您可以只使用参数id
。因此,只需通过变量(参数)id
更改Request.QueryString[“id”]
public ViewResult Details(int id)
{
Report report = db.Reports.Find(id);
ViewBag.TestID = id;
return View(report);
}
无需在id上应用ToString()
,您不应该在不需要的时候使用它(您可能在其他地方需要它,稍后再使用)。只需将它作为原始类型放在视图包中即可
您的Show()
方法很好:)。您现在有了所需的id
参数。(尽量避免使用太多的括号,这会使它看起来很混乱,现在也很清楚。)
你可以说这不推荐,但你仍然可以在你的URL中使用querystring是的,你也可以做响应。写,但你也不应该这样做…我已经这样做了,我已经阅读了一些基本的教程。你能检查一下更新的问题吗?我想避免一遍又一遍地阅读教程,所以有什么问题吗如果你能在我的表演中得到这个ID,我将不胜感激。哦,我真傻…非常感谢…这是我第13个小时编写了很多不同的东西,我过热了…事实上,在改变了细节方法之后,它编译并工作得很好。我现在将更多地研究表演方法。再次感谢。不客气。有时候,去逛逛是件好事rt break,让你头脑清醒,处理所有发生的事情。然后你可以从清醒的头脑开始;)。好的,这个节目确实应该可以工作,controller类中有一个File()
方法(我不知道所有的方法都记在心里:P)。你应该使用File()
方法。我认为您的操作方法还可以,只需删除querystring部分。您已经将id
作为参数传递
public ViewResult Details(int id)
{
Report report = db.Reports.Find(id);
ViewBag.TestID = id;
return View(report);
}
public ActionResult Show(int id)
{
Report report = db.Reports.Find(id);
var imageData = report.Image;
return File(imageData, "image/jpg");
}