You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core MVC中TryUpdateModelAsync报NewArrayInit无效错误求助

解决.NET Core MVC中TryUpdateModelAsync的"NewArrayInit"无效错误

你遇到的错误是因为调用TryUpdateModelAsync时,传入的lambda表达式使用了数组初始化(new object[] { ... }),而该方法仅支持单个成员访问的表达式作为属性筛选条件,不支持数组初始化节点(NewArrayInit)。

以下是两种可行的解决方案:

方案1:使用字符串数组指定要更新的属性

将lambda表达式替换为字符串数组,直接列出需要更新的属性名称:

[HttpPost,ActionName("Edit")]
[ValidateAntiForgeryToken]
public async Task<ActionResult> EditLocaton([ModelBinder(typeof(EncryptDataBinder))]int id, IFormCollection formCollection)
{
    ModelState.Clear();
    LocationModel location = new LocationModel();
    try
    {
        // 用字符串数组指定要更新的属性
        await TryUpdateModelAsync<LocationModel>(location, "", new[] { "ID", "Name", "Code", "RowVersion" });
        // 后续的模型保存逻辑
    }
    catch (Exception ex)
    {
        // 异常处理逻辑
        throw;
    }
    // 返回对应视图或结果
}

方案2:传入多个单独的成员访问表达式

TryUpdateModelAsync支持传入多个独立的lambda表达式,每个表达式对应一个要更新的属性:

[HttpPost,ActionName("Edit")]
[ValidateAntiForgeryToken]
public async Task<ActionResult> EditLocaton([ModelBinder(typeof(EncryptDataBinder))]int id, IFormCollection formCollection)
{
    ModelState.Clear();
    LocationModel location = new LocationModel();
    try
    {
        // 每个属性用单独的lambda表达式指定
        await TryUpdateModelAsync<LocationModel>(location, "", p => p.ID, p => p.Name, p => p.Code, p => p.RowVersion);
        // 后续的模型保存逻辑
    }
    catch (Exception ex)
    {
        // 异常处理逻辑
        throw;
    }
    // 返回对应视图或结果
}

原理说明

TryUpdateModelAsync的表达式重载要求每个参数都是单个成员访问表达式(如p => p.Name),用来明确指定要从表单绑定的属性。你之前的写法生成了数组初始化节点,不符合方法的参数校验规则,因此触发了错误提示。

内容的提问来源于stack exchange,提问作者JagathNalin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 14:55:21