我有部分看法:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<DomainModel.Entities.Product>" %> <div class="item"> <h3><%= Model.Name %></h3> <%= Model.Description %> <% using (Html.BeginForm("AddToCart","Cart")) { %> <%= Html.Hidden("ProductID") %> <%= Html.Hidden("returnUrl",ViewContext.HttpContext.Request.Url.PathAndQuery) %> <input type="submit" value="+ Add to cart" /> <% } %> <h4><%= Model.Price.ToString("c")%></h4> </div>
这里是渲染的html:
<div class="item"> <h3>Kayak</h3> A boat for one person <form action="" method="post"> <input id="ProductID" name="ProductID" type="hidden" value="1" /> <input id="returnUrl" name="returnUrl" type="hidden" value="/" /> <input type="submit" value="+ Add to cart" /> </form> <h4>$275.00</h4> </div>
点击提交按钮时,没有任何反应,我很确定是因为form action属性没有值.应该不要BeginForm(action,controller)来处理渲染窗体动作?我究竟做错了什么?
编辑
CartController的代码AddToCart动作:
public RedirectToRouteResult AddToCart(Cart cart,int productID,string returnUrl) { Product product = productsRepository.Products.FirstOrDefault(p => p.ProductID == productID); cart.AddItem(product,1); return RedirectToAction("Index",new { returnUrl }); }
编辑2
呈现部分的视图:
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> <% foreach (var product in Model) { %> <% Html.RenderPartial("ProductSummary",product); %> <% } %> <div class="pager"> Page: <%=Html.PageLinks((int)ViewData["CurrentPage"],(int)ViewData["TotalPages"],x => Url.Action("List",new { page = x,category = ViewData["CurrentCategory"] })) %> </div> </asp:Content>
编辑3
路线:
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( null,// don't need a name "",// matches the root URL,i.e. ~/ new { controller = "Products",action = "List",category = (string)null,page = 1 } //Defaults ); routes.MapRoute( null,// don't need name "Page{page}",// URL pattern,e.g. ~/Page683 new { controller = "Products",category = (string)null },// defaults new { page = @"\d+" } // constraints: page must be numerical ); routes.MapRoute(null,"{category}",new { controller = "Products",page = 1 }); routes.MapRoute(null,"{category}/Page{page}",action = "List" },new { page = @"\d+" } // constraints: page must be numerical ); }