RedirectToAction ASP .NET MVC

时间:2014-04-15 18:09:50

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我目前阅读Freeman的书籍ASP .NET MVC 4并做一个Web应用程序。因此,有一个名为“Cart”的控制器,其方法为“AddToCart”和一个View。在视图中我们有这样的代码:

@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)

3 个答案:

答案 0 :(得分:1)

让我先回答你的第二个问题。 @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将为“/”, 因为您的索引视图是您的webapp的根,可以这么说。这一切都归结为如何在您的应用程序中配置路由。

有关详情,请参阅以下教程:Controllers and Routing

答案 1 :(得分:0)

索引是MVC&#34;假设的名称&#34;所以,如果你进入索引视图,你就不会看到

/index 

在网址中。只是/

您展示的2个隐藏字段是MVC创建的

<input type="hidden" ...

如果能够在视图中存储您需要的信息,以便通过回发或ajax调用传回控制器

答案 2 :(得分:0)

您的方法控制器使用了参数,隐藏字段是用于将参数发送到服务器端脚本的输入

"returnUrl", Request.Url.PathAndQuery
  

Request.Url.PathAndQuery

RedirectToAction将使用

来确定将您发送给您的位置

return RedirectToAction("Index", new { returnUrl }); 
  

p.ProductID

管理您想要添加到图表的内容