Я начинающий веб-программист, поэтому, пожалуйста, простите меня, если некоторые из моих "жаргонов" неверны. У меня есть проект, использующий ASP.NET с использованием фреймворка MVC3.
Я работаю над представлением администратора, в котором администратор будет изменять список оборудования. Одна из функций - кнопка «обновить», которую я хочу использовать jquery для динамического редактирования записи на веб-странице после отправки сообщения в контроллер MVC.
Я предполагаю, что этот подход «безопасен» в настройках единственного администратора, где существует минимальная проблема, связанная с рассинхронизацией веб-страницы с базой данных.
Я создал строго типизированное представление и надеялся передать данные модели в элемент управления MVC с помощью сообщения AJAX.
В следующем посте я обнаружил что-то похожее на то, что я собираюсь делать: JQuery Ajax и ASP.NET MVC3, вызывающие нулевые параметры.
Я буду использовать образец кода из сообщения выше.
Модель:
public class AddressInfo
{
public string Address1 { get; set; }
public string Address2 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string ZipCode { get; set; }
public string Country { get; set; }
}
Контроллер:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Check(AddressInfo addressInfo)
{
return Json(new { success = true });
}
}
скрипт в представлении:
<script type="text/javascript">
var ai = {
Address1: "423 Judy Road",
Address2: "1001",
City: "New York",
State: "NY",
ZipCode: "10301",
Country: "USA"
};
$.ajax({
url: '/home/check',
type: 'POST',
data: JSON.stringify(ai),
contentType: 'application/json; charset=utf-8',
success: function (data.success) {
alert(data);
},
error: function () {
alert("error");
}
});
</script>
У меня еще не было возможности воспользоваться этим. Но мне было интересно, был ли это «лучший» метод передачи данных модели обратно в элемент управления MVC с использованием AJAX?
Следует ли мне беспокоиться о раскрытии информации о модели?
источник
Я нашел 3 способа реализовать это:
Класс C #:
Действие:
JavaScript вы можете сделать это тремя способами:
1) Строка запроса:
Данные здесь - это строка.
"Address1=blah&Address2=blah&City=blah&State=blah&ZipCode=blah&Country=blah"
2) Массив объектов:
Данные здесь представляют собой массив пар ключ / значение:
3) JSON:
Данные здесь представляют собой сериализованную строку JSON. Обратите внимание, что имя должно совпадать с именем параметра на сервере !!
источник
data: $('input, textarea, select').serialize(),
для моей работы.У меня это сработало так:
источник
то, что у вас есть, в порядке - однако, чтобы сэкономить на вводе, вы можете просто использовать для своих данных
см. http://www.ryancoughlin.com/2009/05/04/how-to-use-jquery-to-serialize-ajax-forms/ для подробностей, синтаксис довольно простой.
источник
Если вы используете MVC 5, прочтите это решение!
Я знаю, что вопрос конкретно касается MVC 3, но я наткнулся на эту страницу с MVC 5 и хотел опубликовать решение для кого-либо еще в моей ситуации. Я пробовал вышеуказанные решения, но они не сработали для меня, фильтр действий не был достигнут, и я не мог понять, почему. Я использую версию 5 в своем проекте и в итоге получил следующий фильтр действий:
- Обратите внимание на
using System.Web.Mvc
иusing System.Web.Mvc.Filters
, а не наhttp
библиотеки (я думаю, что это одна из вещей, которые изменились с MVC v5. -Затем просто примените фильтр
[ValidateJSONAntiForgeryHeader]
к своему действию (или контроллеру), и он должен вызываться правильно.На моей странице макета прямо выше у
</body>
меня есть@AntiForgery.GetHtml();
Наконец, на моей странице Razor я выполняю вызов ajax следующим образом:
источник
data: $("#the-form").serialize()
?