JQuery Ajax File Ypload Вызывает полную страницу Обновить - PullRequest
0 голосов
/ 14 мая 2018

У меня проблема при загрузке файла через Ajax, после того, как de call завершен, страница перезагружается, вот код

function Save() {
    var files1 = $("#file1").get(0).files;
    var data = new FormData();
    data.append("Data", JSON.stringify(GetData()));
    for (i = 0; i < files1.length; i++) {
        data.append("file" + i, files1[i]);
    }
    var resp =
       {
           service: "File/SaveFile",
           sender: data,
           progress: null,
           funct: null,
           antes: null,
           despues: null
       };
    var response = CallServiceUpload(resp);
    response.done(function (responseData, textStatus) {
        var controlInput = $("#file1");
        controlInput.replaceWith(controlInput = controlInput.val('').clone(true));
    });
    return response;
}

function GetData() {
    x =
    {
        ID: 1
    }
    return x;
}

this.CallServiceUpload = function (obj) { 
    return $.ajax({
        type: "POST",
        url: "api/" + obj.service,
        data: obj.sender,
        contentType: false,
        processData: false,
        error: function (message) {           
            alert(message.responseText);
        }        
    });
}

, а вот код сервера с использованием ASP.NET Web Api

using DataManager.Estruct.DTO;
using DataManager.Logic;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Web.Http;

namespace WebApp.Controllers
{
    public class FileController : ApiController
    {
        #region 

        [HttpPost]
        [ActionName("SaveFile")]
        public async Task<JObject> SaveFile()
        {
            // Check if the request contains multipart/form-data.
            var httpContent = Request.Content;
            if (!Request.Content.IsMimeMultipartContent())
            {
                throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
            }
            string root = HttpContext.Current.Server.MapPath("~/App_Data");
            try
            {
                StringBuilder sb = new StringBuilder(); // Holds the response body
                var provider = new CustomMultipartFormDataStreamProvider(root);
                // Read the form data and return an async task.
                await Request.Content.ReadAsMultipartAsync(provider);

                string jsonData = provider.FormData.GetValues("Data")[0];                
                List<string> deletefiles = new List<string>();

                foreach (var file in provider.FileData)
                {
                    FileInfo fileInfo = new FileInfo(file.LocalFileName);
                    //Process File
                }
                provider.FileData.Clear();
                foreach (string deletefile in deletefiles)
                {
                    try
                    {
                        File.Delete(deletefile);
                    }
                    catch (Exception ex)
                    {
                        string error = ex.InnerException.Message;
                    }
                }

                object x = new { data = "ok"};
                return JObject.FromObject(x);

            }           
            catch (Exception ex)
            {
                // string Mensaje = LCuenta.LogError(null, ex, System.Reflection.MethodBase.GetCurrentMethod().Name);
                var error = new { error = ex.Message };
                return JObject.FromObject(error);
            }
        }



        #endregion
    }

    public class CustomMultipartFormDataStreamProvider : MultipartFormDataStreamProvider
    {
        public CustomMultipartFormDataStreamProvider(string path) : base(path) { }

        public override string GetLocalFileName(HttpContentHeaders headers)
        {
            return headers.ContentDisposition.FileName.Replace("\"", string.Empty);
        }
    }


}

Я использую этот код в Alredy для другого приложения, но в этом случае после выполнения javascript-метода Save полная страница перезагружается, если файл небольшой или в вызове нет файлов, только данные y не перезагружаются, html-страница находится в веб-представлении asp с использованием mvc, но является всего лишь контейнером, весь код находится на javascript.

спасибо!;

1 Ответ

0 голосов
/ 19 мая 2018

При нажатии кнопки используйте предотвращение по умолчанию Ex

$("#buttonID").click(function(event){
    event.preventDefault();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...