我使用ajax调用将模型数据传递给我的控制器操作,但是当我通过ajax调用时,控制器会收到空模型, 这是我的控制器
[HttpPost]
public ActionResult Edit( int id, ALDS.Web.Areas.Direct2M3.Models.ItemInputModel collection)
{
try
{
// TODO: Add update logic here
return View("Index");
}
catch
{
return View();
}
}
这是我的输入模型
public class ItemInputModel
{
[Key]
public long ID { get; set; }
[DisplayName("Buyer Code")]
public string ModelCode { get; set; }
[DisplayName("BOM Description")]
public string BOMDescription { get; set; }
//BUYER CODE
[DisplayName("UOM")]
public string UOM { get; set; }
[DisplayName("Alternative UOM")]
public string AltUOM { get; set; }
[DisplayName("Garment Color Wise")]
public string ColorWise { get; set; }
[DisplayName("Garment Size Wise")]
public string SizeWise { get; set; }
[DisplayName("RM Color Wise")]
public string RMcolorWise { get; set; }
[DisplayName("RM Size Wise")]
public string RMsize { get; set; }
[DisplayName("Procument Group")]
public string BrandixProcurementGroupCode { get; set; }
[DisplayName("Designation CPT")]
public string DesignationCPT { get; set; }
[DisplayName("Item Name")]
public string ItemName { get; set; }
[DisplayName("Fabric Composition")]
public string FabricComposition { get; set; }
[DisplayName("Hierachy Code ")]
public string HierarchyCode { get; set; }
[DisplayName("GSM Value")]
public string GSMValue { get; set; }
[DisplayName("RM Width")]
public string RMWidth { get; set; }
}
这是我在视图中的ajax调用
$.ajax({
type: 'POST',
dataType: 'application/json; charset=utf-8',
cache: false,
url: '/ItemMaster/Edit',
data:{ id: collection.ID, collection:collection},
success: function (data, textStatus, jqXHR) {
alert("ok");
//Do Stuff
//$("#DailyInvoiceItems").html(data.Id);
},
error: function (jqXHR, textStatus, errorThrown) {
alert('Failed');
//Do Stuff or Nothing
}
});
我正在使用这个模型传递给ajax
的动作var model = {
ID: $('#ID').val(),
ModelCode: $('#txtModelCode').val(),
BOMDescription: $('#txtBOMDescription').val(),
UOM: $('#txtUOM').val(),
AltUOM: $('#txtAltUOM').val(),
ColorWise: $('#ddnColorWise').val(),
SizeWise: $('#ddnSizeWise').val(),
RMcolorWise: $('#ddnRMcolorWise').val(),
RMsize: $('#ddnRMsize').val(),
BrandixProcurementGroupCode: $('#ddnBrandixProcurementGroupCode').val(),
DesignationCPT: $('#txtDesignationCPT').val(),
ItemName: $('#txtItemName').val(),
FabricComposition: $('#txtFabricComposition').val(),
HierarchyCode: $('#txtHierarchyCode').val(),
GSMValue: $('#txtGSMValue').val(),
RMWidth: $('#txtRMWidth').val()
};
我在action方法中放置了一个断点并检查了collection参数,但它是一个空的输入对象,具有null属性! 谁能帮我???? Thankz,
答案 0 :(得分:2)
ajax代码有很多错误。首先你的方法返回html(一个视图 - 虽然它应该是一个局部视图)所以它需要是dataType: 'html'
,或者你可以完全省略它。其次,因为您发送包含对象的对象,您需要对数据进行字符串化(使用data: JSON.stringify({ id: collection.ID, collection: model}),
并添加contentType: 'application/json; charset=utf-8',
选项(注意您的javascript对象的名称是model
,而不是{{ 1}}。
但是大部分代码都是不必要的。您的模型已包含属性collection
,因此无需发布和绑定它两次,您的控制器方法可以只是
long ID
假设您使用强类型[HttpPost]
public ActionResult Edit(ItemInputModel model)
{
....
return PartialView(..), // not View(..)
}
方法正确生成了表单控件,例如
HtmlHelper
然后您可以使用@Html.HiddenFor(m => m.ID)
@Html.TextBoxFor(m => m.ModelCode)
....
方法正确序列化所有表单控件,以便您的ajax成为
.serialize()
附注:您应始终使用var data = $('form').serialize(); // or use the id of the form is you have given it one
$.ajax({
type: 'POST',
dataType: 'html', // this can be omitted - the ajax() function will work it out
cache: false,
url: '/ItemMaster/Edit',
data: data,
success: function (data, textStatus, jqXHR) {
... // append the partial view you return to the DOM?
},
error: function (jqXHR, textStatus, errorThrown) {
....
}
});
生成正确的网址,例如Url.Action()
。如果此脚本位于外部文件中,则在主视图中生成它(例如,作为您处理的按钮元素的url: '@Url.Action("Edit", "ItemMaster")',
属性)并将其传递给函数。