我目前阅读Freeman的书ASP .NET MVC 4并编写一个Web应用程序。因此,有一个名为“ Cart”的控制器,其方法为“ AddToCart”和一个视图。在视图中,我们有这样的代码:
@model SportsStore.Domain.Entities.Product
<div class="item">
<h3>@Model.Name</h3>
@Model.Description
@using (Html.BeginForm("AddToCart", "Cart"))
{
@Html.HiddenFor(x => x.ProductID)
@Html.Hidden("returnUrl", Request.Url.PathAndQuery)
<input type="submit" value="+ Add to cart" />
}
<h4>@Model.Price.ToString("c")</h4>
</div>
以及控制器代码的方法:
public RedirectToRouteResult AddToCart(Cart cart, int productId, string returnUrl)
{
Product product = repository.Products
.FirstOrDefault(p => p.ProductID == productId);
if (product != null)
{
cart.AddItem(product, 1);
}
return RedirectToAction("Index", new { returnUrl });
}
该代码编译很好,但是我在这里有一些问题。
1)如果在行上放置断点:
return RedirectToAction("Index", new { returnUrl });
您会看到returnUrl的值为“ /”。怎么样?他从哪儿得到的?
2)这些代码行在做什么,因为在书中没有关于它的信息。
@Html.HiddenFor(x => x.ProductID)
@Html.Hidden("returnUrl", Request.Url.PathAndQuery)
最佳答案
首先让我回答您的第二个问题。
@HTML有一组生成HTML的助手。
@Html.HiddenFor(x => x.ProductID)
将输出如下内容:
<input type="hidden" name="ProductID" value="1" />
@Html.Hidden("returnUrl", Request.Url.PathAndQuery)
将输出如下内容:
<input type="hidden" name="returnUrl" value"/" />
现在查看AddToCart方法签名:
AddToCart(Cart cart, int productId, string returnUrl)
这些隐藏输入的值,但在发布到AddToCart操作和模型绑定时将包含在表单中,并将它们相应地分配给
productId
和returnUrl
参数。接下来回答第一个问题:
Request.Url.PathAndQuery属性返回带有查询参数的请求的绝对路径。因此,如果您从索引视图进入AddToCart视图,则
returnUrl
将为“ /”,因为您的索引视图可以说是Web应用程序的根。一切都取决于如何在应用程序中配置路由。
有关更多信息,请观看以下教程:Controllers and Routing
关于c# - RedirectToAction ASP .NET MVC,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23091269/