我只是关注一本ASP.NET MVC 5书,并在他的代码示例中将其添加到视图中:
@model SportsStore.Domain.Entities.Product
<div class="well">
<h3>
<strong>@Model.Name</strong>
<span class="pull-right label label-primary">@Model.Price.ToString("c")</span>
</h3>
@using (Html.BeginForm("AddToCart", "Cart")) {
<div class="pull-right">
@Html.HiddenFor(x => x.ProductID)
@Html.Hidden("returnUrl", **Request.Url.PathAndQuery**)
<input type="submit" class="btn btn-success" value="Add to cart" />
</div>
}
<span class="lead"> @Model.Description</span>
</div>
问题出在我的Visual Studio Ultimate 2013中,关键字Request被标记为红色并且没有编译。我也安装了Resharper
,并认为我需要Ninject.Activation ..这个项目确实使用Ninject而不是这个
答案 0 :(得分:0)
使用HttpContext.Current.Request.Url.PathAndQuery
时,引用System.Web
程序集第4版,它与ASP.NET平台有关,而不是ASP.NET MVC框架。
public HttpRequest Request { get; }
正如我所说,这是来自ASP.NET平台的代码,而不是来自MVC框架的代码,详见Adam Freeman书的下一篇引文。
MVC框架依赖于ASP.NET平台来处理请求,这很有意义,因为它已得到证实, 功能丰富,可以很好地集成到IIS应用程序服务器中。一 问题是ASP.NET平台用来提供的类 关于请求的信息不太适合单元测试,这是一个关键 使用MVC框架的好处。 Microsoft需要引入可测试性,同时保持与现有ASP.NET Web窗体应用程序的兼容性,因此引入了所谓的基类,因为它们与核心ASP.NET平台类的名称相同,后跟单词Base。
如果我从他的书中也没有弄错你的例子。
Request.Url.PathAndQuery
引用System.Web.Webpages
版本3程序集,它是ASP.NET MVC框架程序集,您可以从this link通过NuGet下载。
它使用此代码:
public virtual HttpRequestBase Request { get; }
核心区别是你可以单元测试HttpRequestBase并且不能HttpRequest。因此,对于ASP.NET MVC,建议使用System.Web.Webpages
程序集和Request.Url.PathAndQuery
。
<强>更新强>
要使用System.Web.Webpages
程序集,您应下载System.Web.Webpages
第3版程序集from nuget page。安装它的最简单方法是将Install-Package Microsoft.AspNet.WebPages
粘贴到Visual Studio中的程序包管理器控制台中。