当tab2处于活动状态时,我回发到服务器时{01}在操作方法中为空。当该选项卡处于活动状态时,如何告诉模型绑定器它应该从tab2中取viewModel.FirstName
?一切都适用于tab1。
jQuery hide()和show()用于在标签之间切换。
控制器
@Html.EditorFor(m => m.FirstName)
查看
[HttpPost]
public ActionResult Index(MyViewModel viewModel)
答案 0 :(得分:0)
听起来你在同一个表单中有两个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
从您描述的行为来看,似乎一旦模型绑定器在MyViewModel
中设置了FirstName字段,它就会忽略第二个字段(但我对此并不十分肯定)。
解决方案:
string[] FirstName
。<强>更新强> 您可以更轻松地将另一个参数添加到您的操作方法,而不是更新ViewModel,这样您就可以同时获取FirstName值,然后找出实际提供的值:
public ActionResult Index(MyViewModel viewModel, string [] FirstName).
然后,您可以在action方法中使用逻辑来在viewModel中设置FirstName:
if(!string.IsNullOrEmpty(FirstName[0]))
{
viewModel.FirstName = FirstName[0]
}
else if(!string.IsNullOrEmpty(FirstName[1]))
{
viewModel.FirstName = FirstName[1];
}
答案 1 :(得分:0)
您可以实现禁用重复的名称表单元素。默认情况下,禁用的表单元素将不会传递给请求,并且当Controller显示为活动状态时,您的Controller可能会从tab2接收到corectly的名称。
因此。这是一个例子
$('#tab1')
.hide()
.find('input[name="FirstName]"')
.prop('disabled',true);
$('#tab2').show()
.find('input[name="FirstName]"')
.prop('disabled',false);
后期我建议您将此行为包含在函数中。
希望它有所帮助。