同じフォーム内に両方の 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
と、2 番目のフィールドは無視されるようです (しかし、それについてはよくわかりません)。
ソリューション:
- 内部に異なるタブを含むフォームを作成するのではなく、各タブ内にフォームを作成します。これにより、フォーム内に FirstName が 1 つしかないことが保証されます。
- 両方のフィールドを取得するようにモデルを更新します。string: の配列を使用する必要があります
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];
}