Событие OnClick для разных вещей, таких как divs, img и так далее, Затем используйте данные из них в контроллере, чтобы что-то сделать

#asp.net-mvc #model-view-controller #view #controller

#asp.net-mvc #model-view-controller #Вид #контроллер

Вопрос:

Я искал в Google около двух часов и ничего не мог найти об этом. Что можно использовать (frameowork или, может быть, он уже включен в mvc) для передачи данных из представления в контроллер.

Например, допустим, у меня есть список продуктов, и я хочу удалить его, не обновляя страницу, просто нажав на что-то вроде <div data="23020id" onclick="doSomething()"></div> и поэтому, если я нажму на этот div, что-то произойдет в контроллере без обновления страницы. Я не знаю, как это сделать в Google или к чему я должен был стремиться здесь. Я видел, что многие веб-сайты делают это, но я действительно не знаю, что они используют и как они это делают.

Может ли кто-нибудь дать мне какое-либо направление?

Комментарии:

1. Вы не можете просто вызвать некоторые методы controllers — вы должны выполнить HTTP-запрос с использованием AJAX.

2. Что вы хотите точно знать? как мы можем удалить запись без обновления страницы?

3. @Div да, это помогло бы мне понять, как делать другие вещи, кроме удаления

Ответ №1:

Давайте начнем с вашего примера.

допустим, у меня есть список продуктов, и я хочу удалить его, не обновляя страницу, просто нажав на что-то вроде <div data="23020id" onclick="doSomething()"></div>

Здесь это просто означает, что вы вызываете функцию javascript doSomething() по щелчку. Но вы можете указать Id этот div и выполнить щелчок по этому идентификатору.

 <div id="test"data="23020id"></div>
  

Теперь, что может быть в этой функции?

Эта функция вызвала ваш метод контроллера с помощью вызова ajax, который отправит Id на контроллер, который нам нужно удалить.

код javascript:

 $('#test').click(function() {

    $.ajax({
        type: 'POST',
        url: "/controller/Delete",
        data:{Id:id},
        success: function(data) {
            // update some DOM element with the result returned by the
            // server. So supposing that you have some <div id="someContainer">
            // that will contain the part of the DOM you want updated:

        },
        error: function() {
            alert("error");
        }
    });
}); 
  

Теперь, когда вы нажимаете на кнопку, это вызовет ваш метод контроллера и передаст идентификатор.

 public ActionResult Delete(int Id)
{
  // do delete here.
  return Json(data); 
}
  

Выполните удаление метода и возвращаемого представления и обновите его при успешном выполнении ajax.

Я предлагаю вам использовать Partial View для таких вещей. Подробнее см. Здесь: Рендеринг частичного представления и данных JSON с использованием AJAX в ASP.NET MVC

Комментарии:

1. Спасибо за длинный и подробный ответ. Сейчас я собираюсь немного поэкспериментировать с этим и дам вам знать, как это происходит. Итак, когда он успешно в контроллере ActionResult Удаляет и возвращает данные в обязательном порядке, я могу изменить что-то в succes: function(data). Правильно?

2. Да, вы получите данные function(data) , которые вы должны связать с вашим интерфейсным кодом.

3. Еще одна вещь, в том месте, где у вас есть: data:{Id:id} . идентификатор в нижнем регистре — это идентификатор из div, а идентификатор в верхнем регистре — для перегрузки?

4. Здесь Id указывается параметр вашего действия Delete(int Id) , а во-вторых id , идентификатор записи, которую вы хотите удалить.

5. Пытался работать с in, но после нажатия на продукт он вообще не запускает мой контроллер, только продолжает показывать предупреждение («успех») в случае успеха:

Ответ №2:

вы можете попробовать с этим

вы не можете вернуть View() из вызова ajax. вам нужно повторно запустить Json()

ваш метод действия

 public ActionResult Delete(int Id)
{
  // delete method call
  return Json("success", JsonRequestBehavior.AllowGet);
}
  

ваш вызов ajax

 $("#divId").click(function() {
  var dataattr = $(this).attr("data"); //use this variable 

 $.ajax({
    type: 'POST',
    url: "/controller/Delete",
    data:{Id:dataattr },
    success: function(data) {
        refresh your DOM element
    },
    error: function() {
        alert("error");
    }
 });
});
  

Ответ №3:

для этого вы могли бы использовать jQuery..

 $("#divId").click(function() {
    dataattr = $(this).attr("data"); //use this variable 
    $(this).hide();
});
  

Комментарии:

1. Да, но я хочу знать, как использовать его на сервере в контроллере mvc

2. просто запустите ajax-запрос с переменной dataattr

3. Этот ответ на самом деле не отвечает на вопрос