如何在传递控制器名称和操作方法时使用javascript提交mvc表单

如何在传递控制器名称和操作方法时使用javascript提交mvc表单,javascript,jquery,asp.net-mvc,Javascript,Jquery,Asp.net Mvc,有没有一种方法可以使用JavaScript向我的控制器和特定的操作方法提交mvc表单?我希望如果我使用JavaScript,action方法将收到表单使用的模型。通常我会在表单中使用提交按钮,但我无法在引导模式弹出表单中使用提交按钮。我见过以下使用JavaScript提交表单的方法,但它没有指定要在控制器中使用的操作方法: $(“#我的表格”).submit() 控制器需要以特定的操作方法(即MyAction1)接收表单的视图模型,如下所示: public PartialView

有没有一种方法可以使用JavaScript向我的控制器和特定的操作方法提交mvc表单?我希望如果我使用JavaScript,action方法将收到表单使用的模型。通常我会在表单中使用提交按钮,但我无法在引导模式弹出表单中使用提交按钮。我见过以下使用JavaScript提交表单的方法,但它没有指定要在控制器中使用的操作方法:

$(“#我的表格”).submit()

控制器需要以特定的操作方法(即MyAction1)接收表单的视图模型,如下所示:

        public PartialViewResult MyAction1(ViewModelabc aViewModelabc)
        {
         .....
         return PartialView("_Browse", aViewModelabc);
        }
基本上,我需要使用JavaScript提交表单,就像单击表单提交按钮一样,该按钮针对特定的操作方法,如下所示:

<button type="submit" class="btn btn-primary" data-backdrop="false" 
data-dismiss="modal" id="id-FindModalSubmitBtn" formaction="MyAction1">
     Load Selected Item</button>

加载所选项目
------更新-----

我在下面添加了引导模式弹出窗口,它的底部有一个提交按钮,该按钮没有达到BeginForm和submit按钮中指定的控制器操作方法

<div class="modal" id="id-FindModal">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <a href="#" class="close" data-dismiss="modal">&times;</a>
                    <h3 class="modal-title">Purchase Order Lookup</h3>
                </div>
                <div class="modal-body">
                    @using (Html.BeginForm("PartialViewForBrowseWithModel", "PurchaseOrder", FormMethod.Post))
                    {
                        <div class="row row-spacing ">
                            <div class="form-group row-spacing ">
                                @Html.LabelFor(x => Model.PurchaseOrderIds, htmlAttributes: new { @class = "control-label  LabelStyle1 row-spacing " })
                                <div class=" row-spacing ">
                                    @Html.DropDownListFor(x => Model.PurchaseOrderId,
                         new SelectList(Model.PurchaseOrderIds, "Value", "Text"), "Please Select",
                         new
                         {
                             @class = "form-control row-spacing DropDownStyle2 ",
                             @style = "width:100%; height:28px;",
                             @id = "id-DropDownPurchaseOrderId-FindModal"
                         })
                                    @Html.ValidationMessageFor(x => x.PurchaseOrderId, "", new { @class = "text-danger row-spacing " })
                                </div>
                            </div>
                        </div>
                        <div class="modal-footer">
                            <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
                            <button type="submit" class="btn btn-primary" data-backdrop="false" data-dismiss="modal"
                                    id="id-FindModalSubmitBtn" formaction="PartialViewForBrowseWithModel">
                                Load Selected Purchase Order
                            </button>
                        </div>
                    }
                </div>

            </div>
        </div>
    </div>

采购订单查询
@使用(Html.BeginForm(“PartialViewForBrowseWithModel”,“PurchaseOrder”,FormMethod.Post))
{
@LabelFor(x=>Model.purchaseOrderId,htmlAttributes:new{@class=“control label LabelStyle1 row spating”})
@Html.DropDownListFor(x=>Model.PurchaseOrderId,
新建选择列表(Model.purchaseOrderId、“值”、“文本”)、“请选择”,
新的
{
@class=“form control row spacing DropDownStyle2”,
@style=“宽度:100%;高度:28px;”,
@id=“id DropDownPurchaseOrderId FindModel”
})
@Html.ValidationMessageFor(x=>x.PurchaseOrderId,“,新的{@class=“text danger row space”})
接近
加载选定的采购订单
}

如果您要问的是,我是否可以使用JavaScript提交视图模型,并使用该模型调用MVC控制器,那么是的,您当然可以这样做

表单可以如下所示:

@using (Html.BeginForm(null, null, FormMethod.Post, new {@id = "_frmSubmitId", role = "form"})
{
    // Do whatever

    <button type="submit" id="_btnSubmit">Submit</button>
}


<script>

    $(function(){
        $("#_frmSubmitId").submit(function(){
            event.preventDefault();    // Stops the default Beginform functionallity

            var formdata = $("#_frmSubmitId").serialize();    // Serializes the form

            $.ajax({
                url: '@Url.Action("// Method", "// Controller")',
                type:'POST',
                data: formdata,
                success: function(result){
                    // Do whatever
                }
            });
        });
    })

</script>
@使用(Html.BeginForm(null,null,FormMethod.Post,new{@id=“\u frmSubmitId”,role=“form”})
{
//做任何事
提交
}
$(函数(){
$(“#u frmSubmitId”).submit(函数(){
event.preventDefault();//停止默认功能
var formdata=$(“#frmSubmitId”).serialize();//序列化表单
$.ajax({
url:“@url.Action(“//方法”,“//控制器”)”,
类型:'POST',
数据:formdata,
成功:功能(结果){
//做任何事
}
});
});
})

我们序列化的模型是视图模型(视图顶部的任何模型),这就是控制器方法需要的参数。所以我猜在这种情况下,
viewmodelbc
是视图模型。

我无法使提交按钮在引导模式弹出表单中工作
表单在BS模式中工作正常,所以这是您应该解决的第一个问题
我有问题在下面的方法中使用JavaScript提交表单,但它没有指定要在控制器中使用的操作方法:$(“#myForm”).submit();
。按正常方式提交表单,并将其发送到表单的
操作
属性中提供的位置从按钮中删除
formaction=
,然后它将显示您在
@Html.BeginForm中指定的内容。您的问题很可能是由
formaction=“PartialViewForBrowseWithModel”引起的
不包括控制器,即它应该是
formaction=“PurchaseOrder\PartialViewForBrowseWithModel”
-因此使用
formaction='@Url.Action(“PartialViewForBrowseWithModel”,“PurchaseOrder”)”
来获得正确的路径。如果您的视图已经在“PurchaseOrder”中,那么您可以使用
formaction='@Url.Action(“PartialViewForBrowseWithModel”)
但请注意“PurcaseOrder”(控制器)是隐含的,因此仍将输出
PurchaseOrder\PartialViewForBrowseWithModel
(或任何实际需要的内容)。这一点令人困惑:“我们序列化的模型是视图模型”-您正在序列化表单(表单中的输入/选择/etc)。这可能与viewmodel有关,也可能与viewmodel无关。然后使用模型绑定将其转换为动作的参数-动作的参数也可能与viewmodel有关,也可能与viewmodel无关。