Я следую примеру из класса Pluralsight на одной странице в MVC, и инструктор использует скрытое поле для хранения «режима», в котором находится страница. Когда пользователь нажимает кнопку «Добавить», он должен установить « EventCommand "с использованием некоторого jQuery. Тем не менее, я не могу заставить меня установить.Скрытое значение, не заданное jQuery?
Глядя в инструменты dev, я не вижу ошибок. Когда я устанавливаю некоторые предупреждения внутри jQuery, они срабатывают, поэтому я знаю, что вызывается jQuery. Когда я вставляю источник страницы, я могу видеть и вводить поле с именем «EventCommand». Похоже, он должен быть правильно настроен, но он не устанавливает скрытое поле.
У кого-нибудь есть идея, почему это не сработает?
ViewModel, показывающий свойства, а также HanndleRequest(), который смотрит на EventCommand, чтобы решить, что делать, но NULL при нажатии кнопки добавления.
public string Mode { get; set; }
public string EventCommand { get; set; }
public string EventArgument { get; set; }
public void HandleRequest()
{
switch (EventCommand.ToLower())
{
case "list":
GetCalls();
break;
case "add":
Add();
break;
case "edit":
IsValid = true;
Edit();
break;
}
}
Вид сверху, в котором есть кнопка HiddenFor и Add.
@using (Html.BeginForm())
{
<!-- BEGIN HIDDEN FIELDS AREA -->
@Html.HiddenFor(m => m.EventCommand)
@Html.HiddenFor(m => m.Mode)
@Html.HiddenFor(m => m.EventArgument)
<!-- END HIDDEN FIELDS AREA -->
<button id="btnAdd" class="btn btn-sm btn-success" data-cpp-action="add">
<i class="glyphicon glyphicon-plus"></i> Create New
</button>
jQuery, который находится внизу обзора. Я получаю предупреждение о том, что событие click произошло, но предупреждение с помощью action-cpp-action говорит undefined.
@section scripts {
<script>
$(document).ready(function() {
$("[data-cpp-action]").on("click", function (e) {
e.preventDefault();
alert("in click");
alert("action: " + $(this).data("data-cpp-action"));
$("#EventCommand").val(
$(this).data("data-cpp-action"));
$("#EventArgument").val(
$(this).attr("data-cpp-val"));
$("form").submit();
});
});
</script>
}
На самом деле и этот ответ и @ ответы CarlosFiguerao работают. Тем не менее, поскольку пример, с которым я работаю, использует данные, а не attr, я буду придерживаться этого в качестве своего ответа. Удаление «data-» в jQuery сработало для меня. – Caverman