Jquery 提交前,在同一页面上将数据从一个表单传递到另一个表单

Jquery 提交前,在同一页面上将数据从一个表单传递到另一个表单,jquery,html,asp.net-mvc,forms,razor,Jquery,Html,Asp.net Mvc,Forms,Razor,我一页有两张表格。 在我的第一个表单中,我拥有所有字段数据(名称、用户名、密码等)。在我的第二张表格中,我只有一个按钮。提交时,这两个表单将转到我的控制器中的不同操作 问题-当我从buton click提交表单2时,表单1中的任何字段都不会通过ViewModel传递给控制器。例如,操作“ExternalLogin”没有获得“性别”字段值 在提交第二份表格之前,如何将“性别”从第一份表格传递到第二份表格?JQuery?我尝试将HTML.HiddenFor(m=>m.Gender)放在第二个表单中,

我一页有两张表格。 在我的第一个表单中,我拥有所有字段数据(名称、用户名、密码等)。在我的第二张表格中,我只有一个按钮。提交时,这两个表单将转到我的控制器中的不同操作

问题-当我从buton click提交表单2时,表单1中的任何字段都不会通过ViewModel传递给控制器。例如,操作“ExternalLogin”没有获得“性别”字段值

在提交第二份表格之前,如何将“性别”从第一份表格传递到第二份表格?JQuery?我尝试将HTML.HiddenFor(m=>m.Gender)放在第二个表单中,但没有成功

下面是一些示例代码

@使用(Html.BeginForm(“Register”、“Account”、FormMethod.Post、new{@class=“form horizontal”、@id=“registerForm”、role=“form”、style=“margin left:20px”}))
{
@LabelFor(m=>m.Gender,新的{@id=“genderLabel”})
@EnumDropDownListFor(m=>m.Gender,新的{@id=“genderId”,@class=“selectpicker表单控件”})
//这里还有其他领域
}
@使用(Html.BeginForm(“ExternalLogin”,“Account”,FormMethod.Post,new{ReturnUrl=Model.ReturnUrl,@id=“registerForm”,role=“form”,style=“margin left:20px”}))
{
连接

}
这项功能非常有效,可以满足您的需求

控制器代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Temp.Models;

namespace Temp.Controllers
{
    public class HomeController : Controller
    {
        // GET: Home
        public ActionResult Index()
        {
            return View();
        }

        [HttpPost]
        public void Register(MyModel mymodel)
        {

        }

        [HttpPost]
        public void ExternalLogin(int mygender)
        {

        }
    }
}
模型代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Temp.Models
{
    public class MyModel
    {
        public enum Gender { Male = 1, Female = 2 }

        public Gender gender { get; set; }
    }
}
视图代码

@model Temp.Models.MyModel

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>
<script src="~/scripts/jquery-1.10.2.js"></script>
<script type="text/javascript">
    function OnChange()
    {
        $("#mygender").val($("#genderId").val())    
    }

</script>

@using (Html.BeginForm("Register", "Home", FormMethod.Post, new { @class = "form-horizontal", @id = "registerForm", role = "form", style = "margin-left: 20px" }))
{
    <div id="formGroup1" class="form-group">
        @Html.LabelFor(m => m.gender, new { @id = "genderLabel" })
        <div class="">
            @Html.EnumDropDownListFor(m => m.gender, new { @id = "genderId", @class = "selectpicker form-control",@onchange="javascript:OnChange();" })
        </div>
    </div>
    <button type="submit" class="btn btn-default btn-lg">Connect</button>

}

@using (Html.BeginForm("ExternalLogin", "Home", FormMethod.Post, new { @id = "registerForm", role = "form", style = "margin-left: 20px" }))
{
    <input type="hidden" id="mygender" name="mygender"/>
    <button type="submit" class="btn btn-default btn-lg">Connect</button>
}
@model Temp.Models.MyModel
@{
ViewBag.Title=“Index”;
}
指数
函数OnChange()
{
$(“#我的性别”).val($(“#性别ID”).val())
}
@使用(Html.BeginForm(“Register”、“Home”、FormMethod.Post、new{@class=“form horizontal”、@id=“registerForm”、role=“form”、style=“margin left:20px”}))
{
@LabelFor(m=>m.gender,新的{@id=“genderLabel”})
@EnumDropDownListFor(m=>m.gender,新的{@id=“genderId”,@class=“selectpicker form control”,@onchange=“javascript:onchange();”})
连接
}
@使用(Html.BeginForm(“ExternalLogin”,“Home”,FormMethod.Post,new{@id=“registerForm”,role=“form”,style=“margin left:20px”}))
{
连接
}

这项功能非常有效,可以满足您的需求

控制器代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Temp.Models;

namespace Temp.Controllers
{
    public class HomeController : Controller
    {
        // GET: Home
        public ActionResult Index()
        {
            return View();
        }

        [HttpPost]
        public void Register(MyModel mymodel)
        {

        }

        [HttpPost]
        public void ExternalLogin(int mygender)
        {

        }
    }
}
模型代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Temp.Models
{
    public class MyModel
    {
        public enum Gender { Male = 1, Female = 2 }

        public Gender gender { get; set; }
    }
}
视图代码

@model Temp.Models.MyModel

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>
<script src="~/scripts/jquery-1.10.2.js"></script>
<script type="text/javascript">
    function OnChange()
    {
        $("#mygender").val($("#genderId").val())    
    }

</script>

@using (Html.BeginForm("Register", "Home", FormMethod.Post, new { @class = "form-horizontal", @id = "registerForm", role = "form", style = "margin-left: 20px" }))
{
    <div id="formGroup1" class="form-group">
        @Html.LabelFor(m => m.gender, new { @id = "genderLabel" })
        <div class="">
            @Html.EnumDropDownListFor(m => m.gender, new { @id = "genderId", @class = "selectpicker form-control",@onchange="javascript:OnChange();" })
        </div>
    </div>
    <button type="submit" class="btn btn-default btn-lg">Connect</button>

}

@using (Html.BeginForm("ExternalLogin", "Home", FormMethod.Post, new { @id = "registerForm", role = "form", style = "margin-left: 20px" }))
{
    <input type="hidden" id="mygender" name="mygender"/>
    <button type="submit" class="btn btn-default btn-lg">Connect</button>
}
@model Temp.Models.MyModel
@{
ViewBag.Title=“Index”;
}
指数
函数OnChange()
{
$(“#我的性别”).val($(“#性别ID”).val())
}
@使用(Html.BeginForm(“Register”、“Home”、FormMethod.Post、new{@class=“form horizontal”、@id=“registerForm”、role=“form”、style=“margin left:20px”}))
{
@LabelFor(m=>m.gender,新的{@id=“genderLabel”})
@EnumDropDownListFor(m=>m.gender,新的{@id=“genderId”,@class=“selectpicker form control”,@onchange=“javascript:onchange();”})
连接
}
@使用(Html.BeginForm(“ExternalLogin”,“Home”,FormMethod.Post,new{@id=“registerForm”,role=“form”,style=“margin left:20px”}))
{
连接
}

不要使用两种表单。使用一个表单和两个按钮,它们具有相同的
名称
属性和不同的
属性。然后使用按钮名中的参数发布到一个方法,并根据单击的按钮执行逻辑。我认为这行不通,因为我正在对第一个表单进行大量验证,而第二个表单不需要验证。如果我在一个表单中有两个按钮,不管我按下哪个按钮,我仍然必须验证所有字段。在第二种形式中,我只需要第一种形式中的1个枚举值。然后,您需要在第二个表单中包含一个隐藏的输入,并处理第二个提交按钮,以从第一个表单中获取值并更新第二个表单中的输入。我想我可以在第二个表单中创建一个隐藏字段,在第一个表单中的enum onChange()上,我可以在第二个表单中设置隐藏值?是,这是另一个不使用两种形式的选择。使用一个表单和两个按钮,它们具有相同的
名称
属性和不同的
属性。然后使用按钮名中的参数发布到一个方法,并根据单击的按钮执行逻辑。我认为这行不通,因为我正在对第一个表单进行大量验证,而第二个表单不需要验证。如果我在一个表单中有两个按钮,不管我按下哪个按钮,我仍然必须验证所有字段。在第二种形式中,我只需要第一种形式中的1个枚举值。然后,您需要在第二个表单中包含一个隐藏的输入,并处理第二个提交按钮,以从第一个表单中获取值并更新第二个表单中的输入。我想我可以在第二个表单中创建一个隐藏字段,在第一个表单中的enum onChange()上,我可以在第二个表单中设置隐藏值?是,这是另一种选择