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

 W品书坊之品管理 发布于 2023-02-08 14:08

我有一个标准的表单,它被包装到一个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错误.

1 个回答
  • 使用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))
        {
            <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")"  />
                    </li>
                    <li>
                        <img src="@Url.Content("~/Content/images/1387430978_checkmark-g.png")"  />
                    </li>
                    <li>
                        <img src="@Url.Content("~/Content/images/1387430978_checkmark-g.png")"  />
                    </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()));
                    }
                }
    
            }
        }
    

    2023-02-08 14:10 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有