Asp.net mvc 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

在回顾了大量的问题和互联网数据之后,我解决了一个问题,即正确地从MVC3应用程序中获取URL参数。 问题是在编码方面并没有错误,但在路由方面(我不太擅长路由…)。 这是当前的问题

http://localhost:51561/Report/Details/1
这是我的应用程序显示报告详细信息的方式,这很好。但当它这样做时,我无法从URL参数中获取值,就像这样

Request.QueryString["id"]
但是,当我手动输入URL
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>
图片
“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");
}