Html.BeginForm不张贴到服务器,尽管提交按钮 [英] Html.BeginForm not posting to server despite submit button

查看:102
本文介绍了Html.BeginForm不张贴到服务器,尽管提交按钮的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个标准的形式,它被包裹成一个Html.BeginForm。在底部有一个提交按钮。

I have a standard form, which is wrapped into a Html.BeginForm. In the bottom there is a submit button.

但是,单击该按钮时,我的控制器没有击中。我体验到页面的重新加载,但没有code被击中。我试着调试控制器上侧,并尝试code我可以看到撞到,但它definetely没有被击中。​​

However, when clicking the button my controller isn't getting hit. I experience a reload of the page, but no code is hit. I've tried to debug on the controllers side and try code I could see get hit, but it's definetely not being hit.

剃须刀 - Index.cshtml /Views/BuyBitcoins/Index.cshtml下:

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


                <h3>@ModelRes.BuyBitcoinStrings.Form_YourPurchase</h3>
                <p>
                    @ModelRes.BuyBitcoinStrings.Form_HowMuch<br />
                    @Html.EditorFor(model => model.PurchaseViewModel.PurchaseAmount)
                </p>    


                <div id="plcBitcoinAddress">

                    <p>
                        @ModelRes.BuyBitcoinStrings.Form_EnterAddress<br />
                        @Html.EditorFor(model => model.PurchaseViewModel.BitcoinAddress)
                    </p>

                </div>

                <h3>@ModelRes.BuyBitcoinStrings.Form_Summary</h3>


                <h3>@ModelRes.BuyBitcoinStrings.Form_Personal_Headline</h3>
                <p>
                    @ModelRes.BuyBitcoinStrings.Form_Name:<br />
                    @Html.EditorFor(model => model.Name)
                </p>

                <p>
                    @ModelRes.BuyBitcoinStrings.Form_Email:<br />
                    @Html.EditorFor(model => model.Email)
                </p>

                <p>
                    @ModelRes.BuyBitcoinStrings.Form_Phone<br />
                    @Html.EditorFor(model => model.Phone)
                </p>


                <div id="plcTerms" class="checkbox">
                    <label for="termsChk">
                        <input id="termsChk" type="checkbox">
                        @ModelRes.BuyBitcoinStrings.Form_accept

                    </label>
                </div>
                <div id="newsletterTerms" class="checkbox">
                    <label for="newsletterChk">
                        <input id="newsletterChk" type="checkbox" checked="checked">
                        @ModelRes.BuyBitcoinStrings.Form_newsletter
                    </label>
                </div>


                <div id="usp_list">
                    <ul>
                        <li>
                            <img src="@Url.Content("~/Content/images/1387430978_checkmark-g.png")" style="width: 20px;" />
                            @ModelRes.BuyBitcoinStrings.Form_usp1</li>
                        <li>
                            <img src="@Url.Content("~/Content/images/1387430978_checkmark-g.png")" style="width: 20px;" />
                            @ModelRes.BuyBitcoinStrings.Form_usp2</li>
                        <li>
                            <img src="@Url.Content("~/Content/images/1387430978_checkmark-g.png")" style="width: 20px;" />
                            @ModelRes.BuyBitcoinStrings.Form_usp3</li>
                    </ul>
                </div>


                <input id="submitBtn" type="submit" value="@ModelRes.BuyBitcoinStrings.Form_button" class="btn btn-success btn-lg" />

            }

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<DateTime, OrderSystemLog>(),
                    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循环),但它仍然再没回发到我的控制器)。

I have tried to comment out the language routes in RouteConfig.cs (the foreach loop), but it still made no postback to my controller).

此外,还有负荷没有JavaScript错误,或根据萤火点击。

Also, there are no javascript errors on load or click according to FireBug.

推荐答案

使用首页而不是 BuyBitcoinsNow 的动作名称。我测试你的code,但我没有使用 ModelRes ,它为我工作。看到我的例子:

Use Index instead of BuyBitcoinsNow for the action name. I tested your code, except I didn't use ModelRes, it works for me. See my example:

动作

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))
    {
        <p>
            @Html.EditorFor(model => model.PurchaseViewModel.PurchaseAmount)
        </p>
        <div id="plcBitcoinAddress">
            <p>
                @Html.EditorFor(model => model.PurchaseViewModel.BitcoinAddress)
            </p>
        </div>
        <p>
            @Html.EditorFor(model => model.Name)
        </p>
        <p>
            @Html.EditorFor(model => model.Email)
        </p>
        <p>
            @Html.EditorFor(model => model.Phone)
        </p>
        <div id="plcTerms" class="checkbox">
            <label for="termsChk">
                <input id="termsChk" type="checkbox">
            </label>
        </div>
        <div id="newsletterTerms" class="checkbox">
            <label for="newsletterChk">
                <input id="newsletterChk" type="checkbox" checked="checked">
            </label>
        </div>
        <div id="usp_list">
            <ul>
                <li>
                    <img src="@Url.Content("~/Content/images/1387430978_checkmark-g.png")" style="width: 20px;" />
                </li>
                <li>
                    <img src="@Url.Content("~/Content/images/1387430978_checkmark-g.png")" style="width: 20px;" />
                </li>
                <li>
                    <img src="@Url.Content("~/Content/images/1387430978_checkmark-g.png")" style="width: 20px;" />
                </li>
            </ul>
        </div>
        <input id="submitBtn" type="submit" value="Submit" class="btn btn-success btn-lg" />

    }

型号

 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()));
                }
            }

        }
    }

这篇关于Html.BeginForm不张贴到服务器,尽管提交按钮的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆