我有一个Web应用程序,其中包含许多层(DAL,BLL,SL,UI),每一层都在一个单独的项目中。
我正在使用Ajax在表示层(UI)中使用Web API,而我正在使用单页应用程序。
示例:在表示层(UI)的家庭控制器中的索引动作中仅引用视图:
public class MaCityController : Controller
{
public IActionResult Index()
{
return View("~/Views/Mainten/MasterFile/MaCity/Index.cshtml");
}
}
在此视图中,我正在使用Web API和Ajax进行CRUD操作:
function Add() {
var NameAr = $('#NameAr').val();
var NameEn = $('#NameEn').val();
var Image = $('#FileName').val();
var newData = new Object();
newData.NameAr = NameAr;
newData.NameEn = NameEn;
newData.Image=Image;
$.ajax({
type: "POST",
url: APIURL + "api/MaCity/Add",
contentType: "application/json; charset=utf-8",
data: JSON.stringify(newData),
success: function () {
$('#myModal').modal('hide');
debugger;
loadData();
},
failure: function (data) {
alert(data.statusText);
},
error: function (data) {
alert(data.statusText);
}
});
}
}
我在Sl中的发布代码为
[HttpPost]
public IActionResult Add(City scItem)
{
_unitOfWork.GetRepository<City>().Add(scItem);
_unitOfWork.SaveChanges();
return Ok();
}
其中api在另一个应用程序中的端口与表示层(UI)不同 并且任何处理数据库的操作都在SL中发生(UI中没有数据处理)。
我需要将图像上传到服务器,并将(图像服务器URL)保存到数据库中。
我读了很多文章,但是找不到解决我问题的方法。
有帮助吗?
答案 0 :(得分:0)
您是否尝试过检查文件是否已添加到json请求对象中?您可以尝试几种方法,例如使用Telerik Fiddler之类的工具
在您的json post方法内,检查您的表单中是否有任何文件
var file =$(this).prop('files')[0];
以下是一个示例
将图像添加到FormData
formdata = new FormData();
if($(this).prop('files').length > 0)
{
var file =$(this).prop('files')[0];
formdata.append("image", file);
}
然后最后发布帖子
jQuery.ajax({
url: "api_path,
type: "POST",
data: formdata,
processData: false,
contentType: false,
success: function (result) {
// if all is well
// play the audio file
}
});
您也可以尝试从Controller发送数据(假设您使用的是MVC风格)