繁体   English   中英

RedirectToAction ASP .NET MVC

[英]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 操作和模型绑定将相应地将它们分配给productIdreturnUrl参数。

接下来回答第一个问题:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM