尽管提交按钮,Html.BeginForm仍未发布到服务器

我有一个标准的表单,它被包装成一个Html.BeginForm。 在底部有一个提交按钮。

但是,当点击按钮时,我的控制器没有被击中。 我遇到了页面的重新加载,但没有遇到任何代码。 我试图在控制器端进行调试并尝试我能看到的代码被击中,但它的定义并没有被击中。

Razor – /Views/BuyBitcoins/Index.cshtml下的Index.cshtml:

@using (Html.BeginForm("BuyBitcoinsNow", "BuyBitcoins",FormMethod.Post)) { 

@ModelRes.BuyBitcoinStrings.Form_YourPurchase

@ModelRes.BuyBitcoinStrings.Form_HowMuch
@Html.EditorFor(model => model.PurchaseViewModel.PurchaseAmount)

@ModelRes.BuyBitcoinStrings.Form_EnterAddress
@Html.EditorFor(model => model.PurchaseViewModel.BitcoinAddress)

@ModelRes.BuyBitcoinStrings.Form_Summary

@ModelRes.BuyBitcoinStrings.Form_Personal_Headline

@ModelRes.BuyBitcoinStrings.Form_Name:
@Html.EditorFor(model => model.Name)

@ModelRes.BuyBitcoinStrings.Form_Email:
@Html.EditorFor(model => model.Email)

@ModelRes.BuyBitcoinStrings.Form_Phone
@Html.EditorFor(model => model.Phone)

  • @ModelRes.BuyBitcoinStrings.Form_usp1
  • @ModelRes.BuyBitcoinStrings.Form_usp2
  • @ModelRes.BuyBitcoinStrings.Form_usp3
}

RouteConfig.cs:

 public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Order info", url: "orders/{id}", defaults: new { controller = "Orders", action = "Index", id = "" }); routes.MapRoute( name: "Shop", url: "shop/{action}/{id}", defaults: new { controller = "Shop", action = "Index", id = UrlParameter.Optional } ); routes.MapRoute( name: "Default", url: "{controller}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); foreach (Route r in routes) { if (!(r.RouteHandler is SingleCultureMvcRouteHandler)) { r.RouteHandler = new MultiCultureMvcRouteHandler(); r.Url = "{culture}/" + r.Url; if (r.Defaults == null) { r.Defaults = new RouteValueDictionary(); } r.Defaults.Add("culture", Culture.en.ToString()); //Adding constraint for culture param if (r.Constraints == null) { r.Constraints = new RouteValueDictionary(); } r.Constraints.Add("culture", new CultureConstraint(Culture.en.ToString(), Culture.da.ToString())); } } } 

我的控制器,BuyBitcoinsController.cs

 public OrderManager OrderManager { get; set; } public BuyBitcoinsController() { OrderManager = new OrderManager(); } public ActionResult Index() { return View(new BuyBitcoinViewModel()); } [HttpPost] public ActionResult BuyBitcoinsNow(BuyBitcoinViewModel model) { OrderManager.CreateOrder(new Order() { BitcoinAddress = model.PurchaseViewModel.BitcoinAddress, DateCreated = DateTime.Now, OrderState = OrderState.OrderCreated, Guid = Guid.NewGuid(), Logs = new Dictionary(), User = new XbtUser() { Email = model.Email, FirstName = model.Name, Phone = model.Phone, IsAnonymous = true, } }); return View("Index"); // return View("~/Views/Orders/25892e17-80f6-415f-9c65-7395632f0223"); } 

笔记

我试图在RouteConfig.cs(foreach循环)中注释掉语言路由,但它仍然没有回发到我的控制器)。

此外,根据FireBug,加载或点击时没有javascript错误。

使用Index而不是BuyBitcoinsNow作为操作名称。 我测试了你的代码,除了我没有使用ModelRes ,它适用于我。 看我的例子:

行动

 public ActionResult Index() { return View(new BuyBitcoinViewModel()); } [HttpPost] public ActionResult Index(BuyBitcoinViewModel model) { // return View("Index"); } 

视图

 @model Demo.Models.BuyBitcoinViewModel @using (Html.BeginForm("Index", "Home", FormMethod.Post)) { 

@Html.EditorFor(model => model.PurchaseViewModel.PurchaseAmount)

@Html.EditorFor(model => model.PurchaseViewModel.BitcoinAddress)

@Html.EditorFor(model => model.Name)

@Html.EditorFor(model => model.Email)

@Html.EditorFor(model => model.Phone)

}

模型

  public class BuyBitcoinViewModel { public PurchaseViewModel PurchaseViewModel { get; set; } public string Name { get; set; } public string Email { get; set; } public string Phone { get; set; } } public class PurchaseViewModel { public string PurchaseAmount { get; set; } public string BitcoinAddress { get; set; } } 

RouteConfig.cs

 public class RouteConfig { public enum Culture { ru = 1, en = 2, da =3 } public class CultureConstraint : IRouteConstraint { private string[] _values; public CultureConstraint(params string[] values) { this._values = values; } public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) { string value = values[parameterName].ToString(); return _values.Contains(value); } } public class MultiCultureMvcRouteHandler : MvcRouteHandler { protected override IHttpHandler GetHttpHandler(RequestContext requestContext) { var culture = requestContext.RouteData.Values["culture"].ToString(); var ci = new CultureInfo(culture); Thread.CurrentThread.CurrentUICulture = ci; Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ci.Name); return base.GetHttpHandler(requestContext); } } public class SingleCultureMvcRouteHandler : MvcRouteHandler { } public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); routes.MapRoute( name: "Order info", url: "orders/{id}", defaults: new { controller = "Order", action = "Index", id = "" }); routes.MapRoute( name: "Shop", url: "shop/{action}/{id}", defaults: new {controller = "Shop", action = "Index", id = UrlParameter.Optional} ); foreach (Route r in routes) { if (!(r.RouteHandler is SingleCultureMvcRouteHandler)) { r.RouteHandler = new MultiCultureMvcRouteHandler(); r.Url = "{culture}/" + r.Url; if (r.Defaults == null) { r.Defaults = new RouteValueDictionary(); } r.Defaults.Add("culture", Culture.en.ToString()); if (r.Constraints == null) { r.Constraints = new RouteValueDictionary(); } r.Constraints.Add("culture", new CultureConstraint(Culture.en.ToString(),Culture.da.ToString())); } } } }