[英]RedirectToAction ASP .NET MVC
我目前正在阅读 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属性返回带有查询参数的请求的绝对路径。 因此,如果您从 Index 视图来到 AddToCart 视图,则returnUrl
将是“/”,因为您的 Index 视图是您的 webapp 的根,可以这么说。 这一切都取决于如何在您的应用程序中配置路由。
有关更多信息,请观看这些教程:控制器和路由
索引是MVC“假定”的名称,因此如果您转到索引视图,您将看不到
/index
在网址中。 只是 /
您展示的 2 个隐藏字段是一个 MVC 创建的
<input type="hidden" ...
if 是一种在视图中存储所需信息的方法,以便通过回发或 ajax 调用传回控制器
您的方法控制器使用了参数,隐藏字段是用于将参数发送到服务器端脚本的输入
"returnUrl", Request.Url.PathAndQuery
请求.Url.PathAndQuery
RedirectToAction 将使用它来确定将您发送到何处
return RedirectToAction("Index", new { returnUrl });
p.ProductID
管理您要添加到图表的内容
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.