2012-06-25 27 views
0

在审查了很多问题和互联网数据后,我解决了我的问题,正确地从MVC3应用程序获取URL参数。 事情是,编码没有错,但在路由(我不太擅长路由...)。 这是当前的问题。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

我认为您的操作方法正常,只需删除querystring部分即可。您已经将您的'id'作为参数 – codingbiz

回答

1

首先,您不应该在您的应用程序中使用Request.QueryString。除此之外,在第一个URL中,您没有查询字符串,因此您无法访问它(也可以在msdn上阅读关于Request.QueryStringthis article)。

我也想建议你通过ASP.NET MVC3的基本教程,找到here。很多事情如你的问题在这里都有详细解释。

要现在回答您的问题,请在您的第一个URL示例中,URL中的1是您的操作(详细信息操作)的参数。你必须将此参数添加到您的方法(动作):

public ActionResult Details(int id) 

UPDATE: 你显然是正确的行动(法)的声明。现在,您可以使用参数id。因此只需通过变量(参数)id来更改Request.QueryString["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"); 
} 
+0

我已经这么做了,并且我已经通过了几个基本的教程。你可以请检查更新的问题。我希望避免一遍又一遍地检查教程,因此,为了让我的Show操作获得该ID,可以使用任何替代方法。 – rexdefuror

+0

哦。愚蠢的我......非常感谢......这是我编写了许多不同的东西的第13个小时,我过热了...... – rexdefuror

+0

事实上,它改变细节方法后编译和工作正常。我现在将更多地关注Show方法。再次感谢。 – rexdefuror

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 
    ); 
+0

传递给我更新了我的问题。 – rexdefuror

+0

你可以说这不是建议的,但你仍然可以在你的url中使用查询字符串 – codingbiz

+0

是的,你也可以做'Response.Write',但你也不应该这样做... –