【发布时间】:2020-12-23 19:00:56
【问题描述】:
我想我可能误解了 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。
- 上传操作创建一个类的新实例(在本例中为“TestModel”)
- 我们调用 TryUpdateModelAsync 传入新的(空)模型。
我期望将mod 变量上的name 设置为“某些值”,因为这是我硬编码模型绑定器要做的事情,但它似乎不起作用。
我做错了什么?
【问题讨论】:
标签: asp.net-core model-binding .net-core-2.2