微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

自定义模型活页夹和TryUpdateModelAsync不能按预期方式工作

如何解决自定义模型活页夹和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 举报,一经查实,本站将立刻删除。