Передача параметра в @Url.Action на основе вывода jquery hasClass

Я пытаюсь передать целочисленный параметр в Url.Action на основе вывода jquery hasClass. что-то вроде ниже, но это недопустимый синтаксис.

<li class="myClass">
    <a href="@Url.Action("SetActionMode", "Home",  new { enable = $(this).find('i').hasClass("fa-check") ? 0 : 1 })">
      <i class="fa fa-check"></i> Debug Mode
    </a>
</li>

Каков правильный синтаксис для приведенного выше или есть какой-нибудь простой способ сделать это?


person AKS    schedule 19.06.2015    source источник


Ответы (3)


Я бы сказал, что вы должны «прервать» нажатие ссылки, создать URL-адрес, а затем перейти к этому URL-адресу.

$(".myClass a").click(function(event) {
    event.preventDefault();
    var url = $(this).attr('href');
    // here you do whatever makes sense
    url = url + "?enable=" + ($(this).find('i').hasClass("fa-check") ? 0 : 1)
    window.location.href = url;

});
person Andrey Stukalin    schedule 19.06.2015
comment
Добавлен preventDefault() для отмены действия по умолчанию. api.jquery.com/event.preventDefault - person Satpal; 19.06.2015
comment
Спасибо, это тоже подходит :) - person Andrey Stukalin; 19.06.2015

ASP.NET требуется значение от jQuery, однако они не запускаются одновременно — jQuery запускается на стороне клиента, ASP.NET запускается на стороне сервера. Итак, на стороне сервера он компилирует и отправляет его на сторону клиента, а затем на стороне клиента запускает код jQuery. hasClass — код jQuery, new { ... — код ASP.NET, поэтому это неправильный синтаксис.

person bjfletcher    schedule 19.06.2015

Вы не можете сделать это так, но у вас есть другой вариант, т.е. дайте вашему тегу привязки класс, затем напишите для этого функцию щелчка. После этого используйте location.href, чтобы выполнить то же самое:

<li class="myClass">
    <a href="javascript:void(0)" class="clickme">
      <i class="fa fa-check"></i> Debug Mode
    </a>
</li>

<script>
$('.clickme').on('click',function(){
location.href='/Home/SetActionMode?enable='+$(this).find('i').hasClass('fa-check')?0:1;
})
</script>

Это наверняка сделает то, что вам нужно.

person Rohit Arora    schedule 19.06.2015
comment
Rohit по какой-то причине приведенный выше код, который является простым и легким и побудил меня реализовать, сразу же получил странные ошибки перехода к действию /0 вместо указанного действия href. Я даже изменил его на window.location.href, но это тоже не сработало. Вместо этого происходит действие server/0. Я боролся в течение часа. но все та же проблема, которую я не могу понять. Затем я попробовал приведенный ниже ответ Андрея, который не так прост, как ваш, но сработал за один раз. - person AKS; 22.06.2015