我正在尝试使用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");
}
});
}
这就是全部。