Member 13261884 Ответов: 1

Как я могу сохранить строку BASE64 в виде файла через ajax.post и предотвратить обновление сайта?


Привет!

Я использую элемент управления пользовательским интерфейсом для захвата подписи клиента. Элемент управления возвращает строку BASE64, и поскольку мне нужно добавить изображение в документ (word mail merge) Сначала мне нужно сохранить подпись.

Мой текущий код работает, но так как я отображаю элемент управления сигнатурой в модальном режиме, я должен предотвратить обновление страницы, чтобы иметь возможность добавить другую подпись или изменить некоторые другие поля, которые передаются в поля слияния почты.

Я заметил, что страница обновляется только тогда, когда я действительно сохраняю файл, а не из-за действия Ajax POST в целом.

Это то, что у меня есть до сих пор:

Контроллер:

[HttpPost]
public JsonResult SaveImage(string imageString)
{

    string base64 = imageString.Substring(imageString.IndexOf(',') + 1);

    base64 = base64.Trim('\0');
    byte[] img = Convert.FromBase64String(base64);

    Image image;

    using (MemoryStream ms = new MemoryStream(img))
    {
        image = Image.FromStream(ms);

        image.Save(Server.MapPath("~/Template/Contract/lgeber.png"), System.Drawing.Imaging.ImageFormat.Png);
    }

    return Json("OK");
}


Как только появится изображение.Сохранение выполняется, страница обновляется.

В jQuery:
$('#saveSignLgeber').on("click", function () {
    var signLgeber = $("#signLgeber").ejSignature("instance");
    lgeberImageString = signLgeber.storeSnap[signLgeber.storeSnap.length - 1]

    $.ajax({
        url: "/Doc/SaveImage",

        type: "POST",
        data: JSON.stringify({ imageString: lgeberImageString }),
        processData: false,
        contentType: 'application/json'
    });

    $('#signLgeberModal').modal('hide');
    $('#signLnehmerModal').modal('show');
});


Что я уже пробовал:

Я попытался добавить:
<form>
к моему коду и использованию
function(e){ 
    e.preventDefault() 
}


Я также попытался использовать onclick=return false; для кнопки и установить тип кнопки в button.
Ничего не работает. Он все еще обновляет страницу все время.

Есть идеи?

1 Ответов

Рейтинг:
0

F-ES Sitecore

Правильный синтаксис таков

$('#saveSignLgeber').on("click", function (e) {
    e.preventDefault();
    .... rest of code ...


если это не сработает, проблема будет связана с чем-то другим на странице, вызывающим обновление.


Member 13261884

Спасибо за ваш ответ. Это синтаксис, который я пробовал, но кажется, что как только файл будет сохранен, он просто обновится, что бы я ни делал.
Вы случайно не знаете, является ли это нормальным поведением?

У меня есть и другие функции, где этот конкретный синтаксис работает, но в данном случае он просто не работает....

Редактировать:

Я только что заметил, что это только Chrome, который обновляет страницу. Firefox этого не делает :|

Edit2:

Глупый я. Включенная BrowserLink вызвала обновление...