C# 重定向到操作ASP.NET MVC

C# 重定向到操作ASP.NET MVC,c#,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,我目前读了弗里曼的书ASP.NETMVC4,并做了一个web应用程序。因此,有一个名为“Cart”的控制器,其方法为“AddToCart”和一个视图。在我们看来,我们有这样的代码: @model SportsStore.Domain.Entities.Product <div class="item"> <h3>@Model.Name</h3> @Model.Description @using (Html.BeginForm("Ad

我目前读了弗里曼的书ASP.NETMVC4,并做了一个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>
代码编译得非常好,但我这里有一些问题

1) 如果在该行上放置断点:

return RedirectToAction("Index", new { returnUrl });
您将看到returnUrl的值为“/”。怎么用?他从哪儿弄来的

2) 这些代码行在做什么,因为书中没有关于它的信息

@Html.HiddenFor(x => x.ProductID)
@Html.Hidden("returnUrl", Request.Url.PathAndQuery)
索引是MVC“假定”的名称,因此如果转到索引视图,您将看不到它

/index 
在url中。只是/

您显示的两个隐藏字段是MVC创建的

<input type="hidden" ...

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

"returnUrl", Request.Url.PathAndQuery
Request.Url.PathAndQuery

将由RedirectToAction用于确定将您发送到何处

return RedirectToAction("Index", new { returnUrl }); 
p、 产品ID


要管理您想要添加到图表中的内容,请让我先回答您的第二个问题。 @Html有一组生成Html的帮助程序

@Html.HiddenFor(x => x.ProductID)
将输出如下内容:

将输出如下内容:

现在来看AddToCart方法签名:

AddToCart(购物车、int-productId、字符串返回URL)

这些隐藏输入的值,但在发布到AddToCart时将包含在表单中。操作和模型绑定将相应地将它们分配给
productId
returnUrl
参数

下面回答第一个问题:

属性返回带有查询参数的请求的绝对路径。因此,如果您从索引视图访问AddToCart视图,那么
returnUrl
将是“/”, 因为可以说,索引视图是webapp的根。这一切都取决于如何在应用程序中配置路由


有关更多信息,请观看这些教程:

非常感谢。。。我找到了我问题的答案!
@Html.HiddenFor(x => x.ProductID)
@Html.Hidden("returnUrl", Request.Url.PathAndQuery)