听起来您在同一个表单中拥有两个 FirstName 输入字段。
就像是:
<form>
<div id="tab1">
@Html.EditorFor(m => m.FirstName)
</div>
<div id="tab2">
@Html.EditorFor(m => m.FirstName)
</div>
</form>
当您发布此内容时,表单将提交为:
FirstName=valueFromField01&FirstName=valueFromField02
从您描述的行为来看,似乎一旦模型绑定器在您的中设置 FirstName 字段MyViewModel
,它就会忽略第二个(但我不太确定)。
解决方案:
- 与其在其中拥有一个包含不同选项卡的表单,不如在每个选项卡内拥有一个表单。这将确保您在表单中只有一个名字。
- 更新模型,以便获得这两个字段。您将需要使用一个字符串数组:
string[] FirstName
。
更新:
与其更新您的 ViewModel,不如简单地将另一个参数添加到您的操作方法中,这样您就可以获得两个 FirstName 值,然后找出实际提供了哪个值:
public ActionResult Index(MyViewModel viewModel, string [] FirstName).
然后,您可以在您的操作方法中使用逻辑来在您的 viewModel 中设置 FirstName:
if(!string.IsNullOrEmpty(FirstName[0]))
{
viewModel.FirstName = FirstName[0]
}
else if(!string.IsNullOrEmpty(FirstName[1]))
{
viewModel.FirstName = FirstName[1];
}