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

ASP.NET Core Input Tag Helper 取值异常:未绑定模型新值显示旧提交数据

问题原因

这是ASP.NET Core的默认设计逻辑:当Action接收到表单提交的请求时,系统会自动将所有提交的字段值存入ModelState字典中。Input Tag Helper渲染控件时优先读取ModelState中的同名字段值,仅当ModelState中不存在对应键值时,才会读取你传入的ViewModel属性值。

对应你遇到的场景:

  • 提交的MyForm参数包含Url字段,ModelState中已存储了提交的旧Url值,Tag Helper直接使用了该旧值,忽略了你在ViewModel中设置的新值
  • SellerName字段在提交的表单中没有对应值,且你的ViewModel为该字段添加了[Required]校验注解,请求无对应值会触发校验失败,ModelState中该字段对应的值为空,因此渲染后控件值为空
解决方案

你可以根据实际场景选择以下任意一种方案解决:

  • 方案1:清空全部ModelState
    在返回视图前调用ModelState.Clear()清空所有ModelState记录,Tag Helper会直接读取ViewModel的属性值,示例代码如下:
public IActionResult AddLinkWizardSecond(MyForm form)
{
   var model = new MyViewModel() {
     Url = "https://anotherShop.com/index.html",
     SellerName = "test user 123",
   };
   ModelState.Clear();
   return PartialView("myView", model);
}
  • 方案2:仅清空指定字段的ModelState记录
    如果你需要保留其他字段的ModelState校验状态,可以单独移除指定字段的记录:
ModelState.Remove(nameof(MyViewModel.Url));
ModelState.Remove(nameof(MyViewModel.SellerName));
  • 方案3:手动覆盖指定字段的ModelState值
    如果需要保留ModelState的校验状态,仅修改指定字段的取值,可以直接设置对应字段的ValueProviderResult:
ModelState.SetModelValue(nameof(MyViewModel.Url), new ValueProviderResult(model.Url));
ModelState.SetModelValue(nameof(MyViewModel.SellerName), new ValueProviderResult(model.SellerName));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:57:03