我试图找出当前mvc6(visual studio 2015发布候选)中的模型绑定。 这是我的代码看起来像至今:mvc6自定义模型绑定器没有射击
public class MyObjectModelBinder : IModelBinder
{
public Task<ModelBindingResult> BindModelAsync(ModelBindingContext bindingContext)
{
if (bindingContext.ModelType == typeof(MyObject))
{
var model = new MyObject();
return Task.FromResult(new ModelBindingResult(model, bindingContext.ModelName, true));
}
return Task.FromResult<ModelBindingResult>(null);
}
}
在startup.cs注册
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().Configure<MvcOptions>(options =>
{
options.ModelBinders.Add(typeof(MyObjectModelBinder));
});
}
我的控制器:
[HttpPost]
public void ReceiveMyObject([FromBody] MyObject x)
{
}
我还不关心实际创建来自输入的对象,麻烦我的是,当我调试时,我看到控制器触发(x为空),但binder函数没有被调用。 这里有什么不对的想法?
[编辑:这已经更新]另请注意,我已经看到What is the correct way to create custom model binders in MVC6?,但该帖子中的答案是错误的或过时的,因为提供的示例没有实现当前的IModelBinder。
感谢
编辑:这是用来触发控制器的JavaScript代码:
function sendMessage(i) {
$.ajax({
type: 'POST',
url: 'myurl',
data: data,
contentType: 'application/x-www-form-urlencoded',
dataType: 'json',
success: function (data) { console.log(data) }
});
}
如果我删除它,控制器不会再启动。但是,如果没有参数的话。我附加了用于测试的JavaScript,但实际情况是由外部软件调用,所以我无法更改它。 – Plaga