2016-06-07 5 views
1

Я следую примеру из класса 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> &nbsp;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> 
} 

ответ

2

Нет необходимости в «данных» в функции данных. Используйте только "CPP-действие":

<script> 
    $(document).ready(function() { 
     $("[data-cpp-action]").on("click", function(e) { 
      e.preventDefault(); 

      alert("in click"); 
      alert("action: " + $(this).data("cpp-action")); 

      $("#EventCommand").val($(this).data("cpp-action")); 
      $("#EventArgument").val($(this).attr("cpp-val")); 

      $("form").submit(); 
     }); 
    }); 
</script> 

см также документацию JQuery: https://api.jquery.com/data/

+0

На самом деле и этот ответ и @ ответы CarlosFiguerao работают. Тем не менее, поскольку пример, с которым я работаю, использует данные, а не attr, я буду придерживаться этого в качестве своего ответа. Удаление «data-» в jQuery сработало для меня. – Caverman

1

Изменение

$ (это) .data ("данные-каст-действие"));

для

$ (это) .attr ("данные-каст-действие"));

Вот почему: jQuery Data vs Attr?

+0

Это тоже работает, и я смотрю на ссылку. Мне кажется, я могу уйти с использованием .attr, но поскольку пример, с которым я работаю, использует .data вместо .attr. Я собираюсь придерживаться вышеуказанного ответа для мой сценарий. – Caverman

Смежные вопросы