如何解决自定义模型活页夹和TryUpdateModelAsync不能按预期方式工作
我想我可能会误解TryUpdateModelAsync方法的工作方式,我有一个过程,其中将多部分表单数据传递到PUT中的mt控制器中。
我需要触发模型绑定,使用自定义模型绑定器将表单数据拉出并根据需要进行操作,并使其可用于进一步处理。
出于这个示例的目的,我试图简化过程,这是我所能获得的最简单的方法:
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
[HttpPut]
public async Task<IActionResult> Upload()
{
var mod = new TestModel();
await base.TryUpdateModelAsync(mod,"Model");
return new OkResult();
}
}
[ModelBinder(BinderType = typeof(TestModelBinder))]
public class TestModel
{
public string Name;
}
public class TestModelBinder : IModelBinder
{
public Task BindModelAsync(ModelBindingContext bindingContext)
{
bindingContext.Result = ModelBindingResult.Success(new TestModel()
{
Name = "Some Value"
});
return Task.CompletedTask;
}
}
所以过程是
- 客户端对上载操作进行PUT操作。
- upload操作将创建类的新实例(在本示例中为“ TestModel”)
- 我们调用TryUpdateModelAsync传递新的(空)模型。
我期望将name
变量上的mod
设置为“某些值”,因为这是我对模型绑定程序进行了硬编码的代码,但似乎没有工作。
我在做什么错了?
解决方法
据我所知,TryUpdateModelAsync方法用于手动模型绑定,它不会触发自定义模型绑定器。由于自定义模型绑定程序已发生,因此在您调用TryUpdateModelAsync方法之前。 TryUpdateModelAsync方法不会调用自定义模型绑定程序BindModelAsync方法。
我认为,如果要使用“手动”模型绑定,则可以将绑定器值直接设置为Some Value
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。