Передача строки Html из представления в контроллер с помощью вызова ajax - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть требование, когда мне нужно передать весь HTML тега div в контроллер.Я могу получить HTML, но код не работает, когда я передаю HTML через ajax.

Вот мой код.

Просмотр:

function abc() {

  var html = $("#div").html();

  data = {
    Html: html
  };

  $.ajax({
        url: '@Url.Action("DisplayResult", "Default")', //
        data: data,
        type: "POST",
        contentType: "application/json; charset=utf-8",
        success: function(result) {
          //do something
        });
    },
    error: function(xhr) {
      alert("error");
    }
});
}

Мой контроллер Метод действия:

[HttpPost]
public FileResult DisplayResult(string Html)
{
    return null;
}

Я искал в Интернете и нашел пару связанных сообщений, но в них говорилось о различных решениях, таких как Html.Beginform() и кнопки отправки - нони одно из этих решений не подходит мне.

Ответы [ 5 ]

0 голосов
/ 10 сентября 2018

Спасибо за ваши ответы!

Мне удалось решить эту проблему, добавив строковое свойство с атрибутом [AllowHtml] и передав мой HTML через модель.

Однако, поскольку некоторые пользователи ответили, что передавать html небезопасно, я написал метод в моем контроллере для генерации того же html. Еще раз спасибо за ваши ответы!

0 голосов
/ 06 сентября 2018

Если вы определили «application / json» в contentType, вы должны отправить его после операции stringify.

$.ajax({
    url: '@Url.Action("DisplayResult", "Default")', //
    data: JSON.stringify(data),
    type: "POST",
    contentType: "application/json; charset=utf-8",
    success: function(result) {
      //do something
    });
},
error: function(xhr) {
  alert("error");
}

Если вы не определили «application / json», по умолчанию contentType будет «application / x-www-form-urlencoded», что позволяет передать объект в параметр данных без JSON.stringify.

0 голосов
/ 06 сентября 2018

Отправка Html-контента небезопасна, поэтому вы получите сообщение об ошибке. хотя вы можете обойти эту ошибку, отключив проверку ввода, но это не рекомендуется:

[ValidateInput(false)]
public class YouController: Controller{

}
0 голосов
/ 06 сентября 2018

возможно, тип контента неправильный, но вы можете проверить ошибку из браузера (используя вкладку «Сеть» и щелкнув по вашему запросу, или даже с помощью fiddler)

Я не могу сказать много, не протестировавкод, но другой вариант будет проверять responseText функции error, например:

error: function(xhr, status, error) {
  alert(err.responseText);
}
0 голосов
/ 06 сентября 2018
You have javascript errors and your call is wrong you will need to stringify the data.    

function abc() {
        var html = $("#div").html();
        var dataToSend = JSON.stringify({ 'Html': html });

        $.ajax({
            url: '/Home/DisplayResult', //
            data: dataToSend,
            type: "POST",
            contentType: "application/json; charset=utf-8",
            success: function (result) {
                //do something
    },
    error: function(xhr) {
        alert("error");
    }
    });
    }


    And I have this in HomeController:

        [HttpPost]
        public FileResult DisplayResult(string Html)
        {
            return null;
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...