#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. Этот ответ на самом деле не отвечает на вопрос