首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IModelBinder没有在MVC 3上开火

IModelBinder没有在MVC 3上开火
EN

Stack Overflow用户
提问于 2013-01-13 10:25:09
回答 1查看 541关注 0票数 0

我有一个财务总监:

代码语言:javascript
复制
[HttpPost]
public JsonResult Execute(PaymentModel paymentModel){...}

这就是模型

代码语言:javascript
复制
public class PaymentModel
{
[Required]
[DisplayName("Full name")]
public string FullName { get; set; }
...
}

这是绑定操作

代码语言:javascript
复制
 protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            RegisterGlobalFilters(GlobalFilters.Filters);
            RegisterRoutes(RouteTable.Routes);
            ModelBinders.Binders.Add(typeof(PaymentModel), new PaymentModelsBinding());           
        }

这是绑定的补充

代码语言:javascript
复制
public class PaymentModelsBinding : IModelBinder
    {
        public  object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
        {
//Cant get to here with the debugger
}

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

更新--以下是表单的提交方式:

代码语言:javascript
复制
            $.ajax({
                type: 'POST',
                url: $("#form").attr("action"),
                data: $("#form").serialize(),
                success: function (json) {
                    ...

                },
                dataType: "Json"
            });

我希望这是restful,这意味着我将以每一种可能的WEB方式调用它。

浏览器Ajax,浏览器经典表单提交,WebClient还有更多。

更新--这是我的代码:

代码语言:javascript
复制
kernel.Components.Add<IInjectionHeuristic, CustomInjectionHeuristic>();


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

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

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-13 12:26:40

抱歉,我看不出你的密码有什么问题。这应该能行。作为概念的证明,以下是你可以尝试的:

  1. 使用因特网模板创建新的ASP.NET MVC 3应用程序
  2. 定义视图模型: 公共类PaymentModel {必需的公共字符串FullName { get;set;}}
  3. 定制的模型活页夹: 公共类PaymentModelsBinding : IModelBinder {公共对象BindModel(ControllerContext controllerContext,ModelBindingContext bindingContext) {返回新的PaymentModel();}
  4. HomeController: 公共类HomeController :控制器{公共ActionResult索引(){返回视图(新的PaymentModel());} HttpPost公共ActionResult索引(PaymentModel模型){返回Json(新的成功=真});}
  5. 相应的视图(~/Views/Home/Index.cshtml): @model PaymentModel @url (Html.BeginForm(null,null,FormMethod.Post,new { id = "form“})) { @Html.EditorFor(x => x.FullName) OK }$(‘#form’).submit(函数() { $.ajax({ type: this.method,url: this.action,data:$(this).serialize(),成功:函数(json) { });返回false;});
  6. 最后,在Application_Start中注册模型绑定: ModelBinders.Binders.Add(typeof(PaymentModel),新PaymentModelsBinding();
  7. 以调试模式运行应用程序,提交表单,然后点击自定义模型绑定器。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14302549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档