Контроллер вызовов asp.net MVC из javascript

Есть ли способ вызвать мою функцию вставки из контроллера, используя мой javascript из представления

Вот мой контроллер:

       public ActionResult Update(int a, string b)
        {
            string constr = ConfigurationManager.ConnectionStrings["ConString"].ConnectionString;
            using (MySqlConnection con = new MySqlConnection(constr))
            {
                MySqlCommand cmd = new MySqlCommand("UPDATE MyTable SET a = @a WHERE b = @b ", con);
                //cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@a", a);
                cmd.Parameters.AddWithValue("@b", b);                
                con.Open();
                cmd.ExecuteNonQuery();
                con.Close();
            }
            return RedirectToAction("Index");
        }

А вот мой javascript, содержащий значения из HTML.

     function SaveChanges() {
        var a = document.getElementById("a").value
        var b = document.getElementById("b").value

        //TODO: pass the variables to the controller to perform insert query
    }

Любые предложения или комментарии. TIA.

Вы знаете об Ajax? Кстати, нет смысла возвращать ответ Redirect из метода действия при вызове через Ajax.

Shyju 27.10.2018 07:57

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

Syntax Rommel 27.10.2018 07:59
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
55
4

Ответы 4

для этого вы должны использовать метод jquery Ajax POST. например, эта структура ...

function submit(){
var a = document.getElementById("a").value
var b = document.getElementById("b").value
$.ajax({
  url: '/ControllerName/Update/' 
  dataType: 'text',
  type: 'post',
  contentType: 'application/json',
  data: {
    'a':a,
    'b':b
  },
  success: function( data, textStatus, jQxhr ){
    alert('success')
    console.info(data)
  }, 
  error: function( jqXhr, textStatus, errorThrown ){
    console.info( errorThrown );
  }
});

Пожалуйста, попробуйте это:

 function submit(){
    var a = document.getElementById("a").value;
    var b = document.getElementById("b").value;
    $.ajax({
      url: '/ControllerName/Update(ActionResult)/' 
      type: 'post',
      contentType: 'application/json',
      data: {
        'a':a,
        'b':b
      },
      success: function(data){
        alert('success');
      }, 
      error: function(xhr, textStatus, error){
      alert(xhr.statusText);
      alert(textStatus);
      alert(error);
  }
      }
    });

Нет конкретного сообщения об ошибке, но пока я возвращаюсь к "ошибке"

Syntax Rommel 27.10.2018 08:55

используйте это, чтобы поймать ошибку: error: function (xhr, textStatus, error) {alert (xhr.statusText); предупреждение (textStatus); предупреждение (ошибка); }

Syed Md. Kamruzzaman 27.10.2018 08:57

используйте try {} catch (exception ex) {throw ex;} в контроллере, чтобы вы могли получить исключение.

Syed Md. Kamruzzaman 27.10.2018 09:00

не вижу никаких ошибок, даже если я уже поставил попытку на своем контроллере, но всплывает предупреждение, говорящее, что не найдено

Syntax Rommel 27.10.2018 09:04

Вам нужно изменить имя таблицы, например, использовать наклон до и после имени таблицы MyTable. мой sql обрабатывает таким образом. попробуйте это i.stack.imgur.com/aWYml.png

Syed Md. Kamruzzaman 27.10.2018 09:08

нужно указать одинарную кавычку до и после строки

Syed Md. Kamruzzaman 27.10.2018 09:19

Вы хотите использовать обратный вызов AJAX для вызова действия контроллера со стороны клиента, что должно быть настроено, как в примере ниже:

Функция JS

function SaveChanges() {
    // input values
    // the variable names intentionally changed to avoid confusion
    var aval = $('#a').val();
    var bval = $('#b').val();

    var param = { a: aval, b: bval };

    $.ajax({
        type: 'POST',
        url: '@Url.Action("Update", "ControllerName")',
        data: param,
        // other AJAX settings
        success: function (result) {
            alert("Successfully saved");
            location.href = result; // redirect to index page
        }
        error: function (xhr, status, err) {
            // error handling
        }
    });
}

Затем добавьте атрибут [HttpPost] к действию контроллера и верните данные JSON, которые содержат URL-адрес для перенаправления, потому что RedirectToAction() не работает должным образом с обратным вызовом AJAX:

Действие контроллера

[HttpPost]
public ActionResult Update(int a, string b)
{
    string constr = ConfigurationManager.ConnectionStrings["ConString"].ConnectionString;
    using (MySqlConnection con = new MySqlConnection(constr))
    {
        MySqlCommand cmd = new MySqlCommand("UPDATE MyTable SET a = @a WHERE b = @b ", con);
        cmd.Parameters.AddWithValue("@a", a);
        cmd.Parameters.AddWithValue("@b", b);                
        con.Open();
        cmd.ExecuteNonQuery();
        con.Close();
    }

    // create URL and return to view
    string redirectUrl = Url.Action("Index", "ControllerName");

    return Json(redirectUrl);
}

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

Controller Code

public ActionResult Update(int a, string b)
{
    string constr = ConfigurationManager.ConnectionStrings["ConString"].ConnectionString;
    using (MySqlConnection con = new MySqlConnection(constr))
    {
        MySqlCommand cmd = new MySqlCommand("UPDATE MyTable SET a = @a WHERE b = @b ", con);
        //cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@a", a);
        cmd.Parameters.AddWithValue("@b", b);
        con.Open();
        cmd.ExecuteNonQuery();
        con.Close();
    }
    return RedirectToAction("Index");
}

.cshtml Code

function SaveChanges() {
  var a = document.getElementById("a").value;
  var b = document.getElementById("b").value;

  $.ajax({
    type: 'GET',
    url: '@Url.Action("Update")',
    data: {
      'a': a,
      'b': b
    },
    success: function(result) {
      alert("Successfully saved");
    },
    error: function(xhr, status, err) {
      // error handling code
    }
  });
}

Вам нужно вызвать функцию SaveChanges() в событии нажатия кнопки отправки. На основе вашего ссылочного кода я должен сделать метод как ПОЛУЧАТЬ, если ваш метод на стороне контроллера - ПОЧТА, тогда в методе AJAX вам нужно изменить тип метода ПОЛУЧАТЬ на ПОЧТА.

Другие вопросы по теме