Asp.net mvc 获取对自定义modelbinder中发布的值的访问权限
目前我有一个Asp.net mvc 获取对自定义modelbinder中发布的值的访问权限,asp.net-mvc,asp.net-core,asp.net-core-mvc,Asp.net Mvc,Asp.net Core,Asp.net Core Mvc,目前我有一个IActionFilter,它接受列表作为参数。在该操作方法中,我检查发布的viewmodel值。它看起来像这样: [HttpPost] public async Task<IActionResult> SavePage(List<BaseField> fields) { for (var i = 0; i < fields.Count; i++) { if (fields[i].Type == "bb")
IActionFilter
,它接受列表作为参数。在该操作方法中,我检查发布的viewmodel值。它看起来像这样:
[HttpPost]
public async Task<IActionResult> SavePage(List<BaseField> fields)
{
for (var i = 0; i < fields.Count; i++)
{
if (fields[i].Type == "bb")
{
var inputObj = new InputConfigViewModel();
await TryUpdateModelAsync(inputObj, $"fields[{i}]");
}
if (fields[i].Type == "ee")
{
var tObj = new TextareaConfigViewModel();
await TryUpdateModelAsync(tObj, $"fields[{i}]");
}
}
return RedirectToAction("Index", "Dashboard");
}
如何访问我的ModelBinder
中的列表字段
值,就像从我的控制器中的操作方法一样?自定义模型绑定器处理对象,而不是一般列表。无法访问活页夹中的“全部”列表,但可以访问每个单独的对象
话虽如此,我认为您无法抽象代码,因为您没有ControllerContext
您需要访问活页夹上下文中的FormCollection
,也不执行tryupdatemodelsync
调用,以便从列表中不存在的表单post获取额外信息。您只有ModelBindingContext
如果你还想尝试,你有一个很好的例子
以下是相关部分,您可以从中获取对象的引用:
// Try to fetch the value of the argument by name
var valueProviderResult = bindingContext.ValueProvider.GetValue(modelName);
if (valueProviderResult == ValueProviderResult.None)
{
return TaskCache.CompletedTask;
}
bindingContext.ModelState.SetModelValue(modelName, valueProviderResult);
var value = valueProviderResult.FirstValue;
// Check if the argument value is null or empty
if (string.IsNullOrEmpty(value))
{
return TaskCache.CompletedTask;
}
// Try to fetch the value of the argument by name
var valueProviderResult = bindingContext.ValueProvider.GetValue(modelName);
if (valueProviderResult == ValueProviderResult.None)
{
return TaskCache.CompletedTask;
}
bindingContext.ModelState.SetModelValue(modelName, valueProviderResult);
var value = valueProviderResult.FirstValue;
// Check if the argument value is null or empty
if (string.IsNullOrEmpty(value))
{
return TaskCache.CompletedTask;
}