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;
}