从问题入手
快速开发平台我们先来看一个问题,实际项目研发的时候报的一个错误,如下图,后台Request获取前端上传的image图片,红色箭头处获取的的值为Null,所以pictureFileLoad.FileName就报错,也获取不到图片信息,这是怎么回事儿呢?

定位解决
我们查看前端传送代码,代码如下:
$.post('@Url.Action("Save")', { objectstring: JSON.stringify(params) }, function (data) {
if (data.Status) {
$('#Id').val(data.Id);
layer.close(index);
ShowNotice(data.Message, "info");
}
else {
layer.close(index);
ShowNotice(data.Message, "danger");
}
}, "json");
上述代码中用jquery的post方法异步传输,该方法是一个纯ajax传输方法,通过json格式传输数据,该种方法是纯ajax json数据提交,并不是form表单提交,所以在后台用reques获取表单值是获取不到的,那怎么办呢?
<">解决:查了相关资料,jquery提供了JavaScript脚本专门解决form表单提交的问题,它就是ajaxform, 这就好办,更改下前端代码,全前端代码如下: <form enctype="multipart/form-data" id="main-form" method="post">
//form表单及其组成...
</form>
$("#btn_save").bind("click", function () {
var params = $("#main-form").serializeJSON();
var workexpList = $('#workexpstb').bootstrapTable('getData');
params.WorkExpList = workexpList;
var eductaionexpList = $('#eductaionexpstb').bootstrapTable('getData');
params.EductaionExpList = eductaionexpList;
layer.confirm('@this.Intl("Common.SaveConfirm.Message").ToString()', { btn: ['确认', '取消'] }, function () {
layer.close(layer.index);
for (var x = 0; x < workexpList.length; x++) {
if (workexpList[x].CName === null || workexpList[x].CName === "" || workexpList[x].StartDate === null || workexpList[x].StartDate === "") {
ShowNotice("工作经历有明细项不能为空,请输入完全!", "danger");
return;
}
}
var index = layer.msg('@this.Intl("Field:Common.Dealing.Message").ToString()', {
icon: 16,
time: false,
shade: 0.2
});
$('#main-form').data('bootstrapValidator').validate();
if ($('#main-form').data('bootstrapValidator').isValid()) {
$("#main-form").ajaxSubmit({
data: { "objectstring": JSON.stringify(params) },
url: '@Url.Action("Save")',
success: function (data) {
if (data.Status) {
$('#Id').val(data.Id);
layer.close(index);
}
else {
layer.close(index);
ShowNotice(data.message, "danger");
}
}
});
}
else {
layer.close(index);
}
}, function () { })
});
}
结语
如果后台需要使用rquest方式获取前端值,则需要用ajaxform提交数据,如图两种提交方式对比:

贴上后台接收action代码:
[HttpPost]
public ActionResult Save(string objectstring)
{
bool status = false;
string message = this.Intl("Common.Message.SaveSuccessfully");
try
{
var resumemain = JsonConvert.DeserializeObject<ResumeMain>(objectstring);
.....
}
本站文章除注明转载外,均为本站原创或翻译,欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,共创和谐网络环境。
转载请注明:文章转载自:软件开发框架 » 软件开发框架Ajax两种实现方法对比
本文标题:软件开发框架Ajax两种实现方法对比