0

我有这个控制器:

[HttpPost]
public JsonResult Execute(PaymentModel paymentModel){...}

这是模型

public class PaymentModel
{
[Required]
[DisplayName("Full name")]
public string FullName { get; set; }
...
}

这是绑定动作

 protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            RegisterGlobalFilters(GlobalFilters.Filters);
            RegisterRoutes(RouteTable.Routes);
            ModelBinders.Binders.Add(typeof(PaymentModel), new PaymentModelsBinding());           
        }

这是绑定的实现

public class PaymentModelsBinding : IModelBinder
    {
        public  object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
        {
//Cant get to here with the debugger
}

我不知道这是否相关,但我正在使用 Ninject 向控制器构造函数注入。

更新 这是提交表单的方式:

            $.ajax({
                type: 'POST',
                url: $("#form").attr("action"),
                data: $("#form").serialize(),
                success: function (json) {
                    ...

                },
                dataType: "Json"
            });

我希望那是宁静的,这意味着我会以所有可能的 WEB 方式调用它。
浏览器 Ajax、浏览器经典表单提交、WebClient... 等等。

更新 这是我的 ninject 代码:

kernel.Components.Add<IInjectionHeuristic, CustomInjectionHeuristic>();


            kernel.Bind<IPaymentMethodFactory>().ToProvider<PaymentMethodFactoryProvider>().InSingletonScope();
            kernel.Bind<IDefaultBll>().To<DefaultBll>().InSingletonScope();

            kernel
                .Bind<IDalSession>()
                .ToProvider<HttpDalSessionProvider>()
                .InRequestScope();

谢谢

4

1 回答 1

1

抱歉,我看不出你的代码有什么问题。这应该有效。作为概念证明,您可以尝试以下方法:

  1. 使用 Internet 模板创建一个新的 ASP.NET MVC 3 应用程序
  2. 定义视图模型:

        public class PaymentModel
        {
            [Required]
            [DisplayName("Full name")]
            public string FullName { get; set; }
        }
    
  3. 自定义模型绑定器:

    public class PaymentModelsBinding : IModelBinder
    {
        public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
        {
            return new PaymentModel();
        }
    }
    
  4. 家庭控制器:

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View(new PaymentModel());
        }
    
        [HttpPost]
        public ActionResult Index(PaymentModel model)
        {
            return Json(new { success = true });
        }
    }
    
  5. 对应的视图 ( ~/Views/Home/Index.cshtml):

    @model PaymentModel
    
    @using (Html.BeginForm(null, null, FormMethod.Post, new { id = "form" }))
    {
        @Html.EditorFor(x => x.FullName)
        <button type="submit">OK</button>
    }
    
    <script type="text/javascript">
        $('#form').submit(function () {
            $.ajax({
                type: this.method,
                url: this.action,
                data: $(this).serialize(),
                success: function (json) {
    
                }
            });
            return false;
        });
    </script>
    
  6. 最后将模型绑定器注册到Application_Start

    ModelBinders.Binders.Add(typeof(PaymentModel), new PaymentModelsBinding());
    
  7. 在调试模式下运行应用程序,提交表单,然后自定义模型绑定器被命中。

所以现在的问题变成了:你做了什么不同的事情?

于 2013-01-13T12:26:40.167 回答