使用ViewModel的Asp Core Ajax Post

时间:2016-04-30 19:46:33

标签: ajax asp.net-core-mvc

我正在开发一个Asp核心项目并尝试将Ajax发布一个文件选择器blob Javascript对象返回到将图像上传到Amazon S3的操作。我已经尝试了几种不同的方法,并且无法使其工作。它似乎是一个模型绑定问题。 当我只使用字符串参数将图像URL发布到操作时,此功能有效,但我也需要文件名。

问题:行动中的模型对象为空

Ajax代码:

function pickit() {
            //Start the filepicker
            filepicker.pick(
              {
                  //cropRatio: 4 / 3,
                  ////cropMin: [200, 100],
                  //cropForce: true,
                  mimetype: 'image/*',
                  //services: ['CONVERT', 'COMPUTER', 'FACEBOOK', 'FLICKR', 'DROPBOX', 'INSTAGRAM', 'BOX', 'EVERNOTE', 'GMAIL', 'PICASA', 'IMAGE_SEARCH', 'FTP', 'GOOGLE_DRIVE', 'SKYDRIVE', 'URL', 'WEBCAM', 'CLOUDDRIVE', 'IMGUR', 'CLOUDAPP'],
                  conversions: ['crop', 'rotate', 'filter', 'scale']
              },
              function (Blob) {
                  $("#imagespinner").removeClass("invisible")
                  $.ajax({
                      type: "POST",
                      url: '@Url.Action("CreateImage","Photos")',
                      contentType: 'application/json',
                      dataType: "json",
                      data: JSON.stringify(Blob),
                      success: function (data, textStatus, jqXHR) {
                          $("#ImageURL").val(data);
                          var img = document.getElementById("imgImageURL");
                          img.src = data;
                          $("#imagespinner").addClass("invisible")
                      },
                      error: function (jqXHR, textStatus, error) {
                          alertify.alert(jqXHR.responseText);
                          $("#imagespinner").addClass("invisible")
                      }
                  });


                  setTimeout(function () { $('#image-loading-message').fadeOut() }, 500);

              },
               function (FPError) {

               },
               function (FPProgress) {

               }

             );
        };

控制器操作:

    [HttpPost]
        public async Task<JsonResult> CreateImage(FilePickerViewModel model)
        {
            if (!String.IsNullOrWhiteSpace(model.url))
            {
                //Code to Upload to S3
return Json("ImageURL");
            else
            {
                Response.StatusCode = 400;
                return Json("Url is needed");
            }
        }

视图模型:

    public class FilePickerViewModel
{
    public Int32 id { get; set; }
    public String url { get; set; }
    public String filename { get; set; }
    public Int32 size { get; set; }
    public String client { get; set; }
    public String mimetype { get; set; }
    public Boolean isWriteable { get; set; }
}

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

我想出了问题,控制器动作需要声明[FromBody],因为这是来自ajax帖子