Ajax.BeginForm html属性不起作用

时间:2017-02-11 03:14:52

标签: asp.net-mvc

我正在尝试使用jquery ajax将数据发布到mvc操作。但问题是,无论何时我尝试序列化这个表单(这是一个局部视图),我在表单的html属性中提供的Id都不被jquery识别。这是代码:

@using(Ajax.BeginForm("AddMaterials" , "Bom" ,null, new AjaxOptions {   
HttpMethod = "POST" }  , new { @id = "ajaxBomMaterials" }))

这是序列化的代码:

var data = $("#ajaxBomMaterials").serialize();

如果我使用"表格"相反,它显示整个表格的序列化数据(主要形式以及局部视图形式),而我只需要部分形式的数据。由于我是ASP.Net和MVC的新手,我一直在寻找最近2天,但我还没有找到答案。

以下是序列化数据:

__RequestVerificationToken=67iIFQEtEOgXTrApYDPuoTC7EvLs0cXYOgzdFrnUwUQpPac5NsxOgo6q-YM5Q3qH9Votloa1sYrzahLoYuKLLetghrk8pNt9s2Y80KVobl41&BomId=0&ItemId=1&BomName=&ItemName=item+1001&Quantity=0&IsActive=false&IsDefault=false&WithOperations=false&CurrencyId=1&__RequestVerificationToken=FXc2NYDlDaNwuqOnZQNIYOonE8_8qk61xaxM5M92cOSz938KA5CRzAvBUSlP_HnM1g4iozC56r1Kh6VLXMex6l97SY3dxNhGQfv2oeOVHTM1&BomId=0&BomMaterialId=0&ItemId=5&Items.SellingRate=33&Rate=452&Amount=14916&Scrap=12  

我只想要这个:

__RequestVerificationToken=FXc2NYDlDaNwuqOnZQNIYOonE8_8qk61xaxM5M92cOSz938KA5CRzAvBUSlP_HnM1g4iozC56r1Kh6VLXMex6l97SY3dxNhGQfv2oeOVHTM1&BomId=0&BomMaterialId=0&ItemId=5&Items.SellingRate=33&Rate=452&Amount=14916&Scrap=12

如果还有其他需要,我会提供。

这是我调用局部视图的主要形式。为简洁起见,我把它缩短了。

@model ERPFynWeb.Infrastructure.ViewModels.BomViewModel
....
@Scripts.Render("~/bundles/jquery")

@using(Html.BeginForm("SaveBom" , "Bom",new {@id="BomForm"}))
{    
    @Html.AntiForgeryToken()
    @Html.HiddenFor(m => m.BomId)

    @Html.LabelFor(m => m.ItemId)     
    @Html.DropDownListFor(m => m.ItemId , new SelectList(Model.Items , "ItemId", "ItemCode") , "Select item code" , new { @id = "ddlItem" , @class = "form-control" })                                                
    @Html.ValidationMessageFor(m => m.ItemId)

    <div id="addMaterials" style="border: 1px solid lightgray; margin-bottom: 20px; padding-bottom: 5px;">                                
        @Html.Partial("_MaterialsPartialForm",Model.BommaterialsViewModel)
    </div>
    <button type="submit" value="submit" class="btn btn-primary" >Save</button>
}

这是部分视图完整代码:

@model ERPFynWeb.Infrastructure.ViewModels.BomMaterialsViewModel

@using(Ajax.BeginForm("AddMaterials" , "Bom" ,null, 
    new AjaxOptions { HttpMethod = "POST" }  , new { @id = "ajaxBomMaterials" }))
{
    @Html.AntiForgeryToken()
    @Html.HiddenFor(m => m.BomId)
    @Html.HiddenFor(m => m.BomMaterialId)

    @Html.LabelFor(m => m.ItemId)
    @Html.DropDownListFor(m => m.ItemId , new SelectList(Model.ItemsList , "ItemId" , "ItemCode") , "Select item" , new { @id = "itemDdl" , @class = "form-control" })
    @Html.ValidationMessageFor(m => m.ItemId)

    @Html.LabelFor(m => m.Quantity)
    @Html.TextBoxFor(m => m.Items.SellingRate , new { @id = "qtyBox" , @class = "form-control" })

    .... // more inputs
    <button onclick="AddMaterialAjax();" type="button">Save it</button>
}

这是我在局部视图中使用的jquery。

function AddMaterialAjax() {
    var data = $("#ajaxBomMaterials").serialize();
    $.ajax({
        url: "@Url.Action("AddMaterials","Bom")",
        type: "POST",
        data: data,
        success: function () {
            alert("Materials added");
        },
        error: function () {
            alert("Materials cannot be added");
        }
    });
}

这就是全部。

0 个答案:

没有答案