C# 为什么asp for input tag helper总是使用表单数据而不是viewmodel?

C# 为什么asp for input tag helper总是使用表单数据而不是viewmodel?,c#,asp.net-core,C#,Asp.net Core,我的目标是,在提交表单时,能够再次显示表单,但要使用修改后的模型,在其中替换一些值 以这个简化的代码为例: 公共类IndexController:控制器 { [HttpGet(“”) 公共IActionResult索引() { 返回视图(newindexviewmodel(){Origin=“GET”}); } [HttpPost(“”) 公共IActionResult索引(IndexViewModel视图模型) { viewModel.Origin=“POST”; viewModel.Name

我的目标是,在提交表单时,能够再次显示表单,但要使用修改后的模型,在其中替换一些值

以这个简化的代码为例:

公共类IndexController:控制器
{
[HttpGet(“”)
公共IActionResult索引()
{
返回视图(newindexviewmodel(){Origin=“GET”});
}
[HttpPost(“”)
公共IActionResult索引(IndexViewModel视图模型)
{
viewModel.Origin=“POST”;
viewModel.Name=“Fixed Name”//我想强制此值
返回视图(viewModel);
}
}
公共类索引模型
{
公共字符串名称{get;set;}
公共字符串源{get;set;}
}
以下观点:

@model IndexViewModel
名称:
来源:@Model.Origin
提交
当我提交表单时,该方法通过POST方法,但是视图HTML只使用原始表单值

渲染视图时,将忽略并从不使用值“Fixed Name”


我假设
asp for
标记帮助程序总是对
FormCollection
值给予更高的优先级。有没有办法强制使用模型值?

我无法回答为什么会发生这种情况,可能有更了解情况的人可以,但我不得不使用这种模式:

  [HttpPost("")]
  public IActionResult Index(IndexViewModel viewModel)
  {
    viewModel.Origin = "POST";
    // persist model or use TempData
    return RedirectToAction("AfterPost");   
  }

  public IActionResult AfterPost()
  {
    // get model or retrieve from TempData
    viewModel.Name = "Fixed Name"; // I want to force this value
    return View(viewModel);
  }

我可以成功呈现viewmodel值。为什么您的控制器扩展了ControllerBase?此上下文中没有视图,我在这行中得到错误:
返回视图(XXX)
。您是如何返回视图的?实际上,它存在于Controller中,因此您需要更改为:
公共类IndexController:Controller
@Rena您是对的,
Controller base
是我原始代码库的剩余部分。我删除了它。作为一种解决方法,我已显式设置值
。标记助手在设置时永远不会覆盖值。你说得对,这也是我更喜欢使用的模式。但在这种情况下,我需要显示表单(某些进程认为它无效),但需要更改用户提交的一些值。TempData可以做到这一点。。。但将开始需要一些我不希望依赖的会话状态。我不确定
Core
是否有“值提供程序”,但理论上,您可以编写一个自定义值提供程序来绑定您的模型值,而不是发布的值。