尽管提交按钮,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())); } } } }
- 如何使用C#将数据属性添加到下拉菜单
- DateTime ToString(“dd / MM / yyyy”)返回dd.MM.yyyy
- 导致此错误的原因是什么? 执行处理程序’System.Web.Mvc.HttpHandlerUtil + ServerExecuteHttpHandlerWrapper’的子请求时出错
- 从sql server下载varbinary数据
- 在ASP.NETunit testing中模拟HttpContext.server.MapPath
- 强制回发Asp.Net
- 使用数据MVC 3 .NET填充多选列表
- 是否可以在同一个asp.net网站上安装C#和vb.net?
- 如何在每个逗号处打破一个字符串?