Asp.net mvc 5 当页面有多个表单时,在回发后恢复活动的引导选项卡

Asp.net mvc 5 当页面有多个表单时,在回发后恢复活动的引导选项卡,asp.net-mvc-5,forms,bootstrap-tabs,multiple-forms,Asp.net Mvc 5,Forms,Bootstrap Tabs,Multiple Forms,我有一个ASP.NETMVC5项目,它有一个包含两个引导选项卡的页面。每个选项卡有两个表单,页面上总共有4个表单。我的viewmodel有4个表单中所有字段的超集 发布表单时,我希望响应视图显示表单发布时显示的相同选项卡。这个答案表明我应该在一个隐藏字段中设置活动选项卡,在视图模型中返回它,然后在回发时恢复它 这个答案表明返回的字段必须在我返回的表单中。这是一个问题,因为隐藏字段需要在所有表单的范围内 在回发时,当我在页面上有多个表单时,如何显示表单发布时显示的同一选项卡?我解决了这个问题,删除

我有一个ASP.NETMVC5项目,它有一个包含两个引导选项卡的页面。每个选项卡有两个表单,页面上总共有4个表单。我的viewmodel有4个表单中所有字段的超集

发布表单时,我希望响应视图显示表单发布时显示的相同选项卡。这个答案表明我应该在一个隐藏字段中设置活动选项卡,在视图模型中返回它,然后在回发时恢复它

这个答案表明返回的字段必须在我返回的表单中。这是一个问题,因为隐藏字段需要在所有表单的范围内


在回发时,当我在页面上有多个表单时,如何显示表单发布时显示的同一选项卡?

我解决了这个问题,删除了4个表单,并将其替换为跨越前4个表单的单个表单。为了让表单发回正确的控制器/操作,我编写了一些javascript,当4个提交按钮中的一个被激活时调用

它将新表单的操作设置为相应的控制器/操作,然后提交表单。这样,只有1个表单和1个隐藏字段来保存活动选项卡,并且在回发时仍会调用正确的操作。这里有一个包含2个选项卡和(为简单起见)仅2个操作的测试程序:

视图:

最后是视图模型:

    namespace MultiPostDestinations.Models {
    public class HomeVM {
        public string ActiveTab { get; set; }
        public string F1 { get; set; }
        public string F2 { get; set; }

    }
}
using MultiPostDestinations.Models;
using System.Web.Mvc;

namespace MultiPostDestinations.Controllers {
    public class HomeController : Controller {
        public ActionResult Index() {
            var vm = new HomeVM() { F1 = "Index-F1", F2 = "Index-F2", ActiveTab = "" };
            return View("Index", vm);
        }

        [HttpPost]
        public ActionResult Submit1(HomeVM vm) {
            System.Diagnostics.Debug.WriteLine("HomeVM.Submit1: F1={0}, F2={1}", vm.F1 ?? string.Empty, vm.F2 ?? string.Empty);
            // ModelState.Clear();         // uncomment if you want Html.EditorFor() fields to update on postback
            return View("Index", vm);
        }

        [HttpPost]
        public ActionResult Submit2(HomeVM vm) {
            System.Diagnostics.Debug.WriteLine("HomeVM.Submit2: F1={0}, F2={1}", vm.F1 ?? string.Empty, vm.F2 ?? string.Empty);
            //ModelState.Clear();         // uncomment if you want Html.EditorFor() fields to update on postback
            return View("Index", vm);
        }

    }
}
    namespace MultiPostDestinations.Models {
    public class HomeVM {
        public string ActiveTab { get; set; }
        public string F1 { get; set; }
        public string F2 { get; set; }

    }
}