2015-05-12 7 views
0

Я хочу вызвать действие с точки зрения с помощью JavaScript, но я не могу это сделать: Вот мой код:Вызов действия контроллера из JavaScript в представлении

@if (ViewBag.Status == true) 
{ 
    <script language="javascript" type="text/javascript"> 
     if (confirm("Some message")); 
     //And here i want to add action call 
    </script> 
} 

Я пытаюсь использовать @Html. Действие, но этот разрушенный код сценария и подтверждение сообщения не показывались. Когда я пишу это, как показано здесь: Calling ASP.NET MVC Action Methods from JavaScript:

@if (ViewBag.Status == true) 
    { 
     <script language="javascript" type="text/javascript"> 
      if (confirm("Some message")); 
      { 
       $.ajax({ 
         url: 'MyController/MyAction', 
         data: { id: id }, 
         success: function() { 
          alert('Added'); 
         } 
       }); 
      } 
     </script> 
    } 

ничего не изменилось. Он отображает диалоговое окно подтверждения, но не вызывает метод

+0

Возможный дубликат [Вызов методов ASP.NET MVC Action из JavaScript] (http://stackoverflow.com/questions/8952953/calling-asp-net-mvc-action-methods-from-javascript) – jrummell

+0

Что делает ваш javascript консоль сказать? –

+0

Где я могу найти его? Я использую визуальную студию 2013 – Corriel

ответ

0

Вы должны изменить свой код, чтобы что-то вроде this.In тогда вы бы назвали: func(@ViewBag.Status)

@Section scripts 
    <script language="javascript" type="text/javascript"> 
     //val in this case being the value of the ViewBag passed from where the call is occurring 
     function func(val) { 
      if (val == true) { 
       if (confirm("Some message")); 
       { 
        $.ajax({ 
         url: 'MyController/MyAction', 
         data: { id: id }, 
         type: "POST", 
         success: function() { 
          alert('Added'); 
         } 
        }); 
       } 
      } 
     } 
    </script> 
end section 

Также в контроллере помнить, чтобы применить атрибут [HttpPost] на методе, как так:

[HttpPost] 
public ActionResult MyAction(string id) 
{ 
    // your code 
    return Json();//your response 
} 
0

JavaScript не может вызывать действие контроллера, если вы не используете Ajax или другой механизм клиентской стороны для общения с сервером!

Что вам нужно использовать xhr для Tak с сервера или использовать следующий код JQuery

<script src='jquery-latest.js'></script> 
    @if (ViewBag.Status == true) 
    { 
    <script language="javascript" type="text/javascript"> 
     if (confirm("Some message")){ 
     //And here i want to add action call 
      $.get('@Url("action","controller",null)') 
      .done(function(data){ 
       //use loaded data here 
      }).fail(function(e,f,g){ 
       console.log({e:e,f:f,g:g}) 
      }); 
     } 
    </script> 
    } 

PS: не забудьте сослаться на библиотеку JQuery

+0

Он отображает диалоговое окно подтверждения, но не вызывает действие – Corriel

+0

Mabye ваш url недопустим, см. мой отредактированный ответ около 'url: '@ Url.Action (« MyAction », "MyController") ' – Bellash

0

Если я вас правильно понял, вы хотите вызвать свой метод Action в контроллере из javascript. И подтвердите сообщение об успешном завершении.

Вот код для этого:

if ('@ViewBag.Status' == true) 
{ 
$.ajax({ 
       type: "Post", 
       url: '@Url.Action("MyAction", "MyController")', 
       data: { Id: Id }, 
       dataType: "json", 
       traditional: true, 
       success: function (data) { 
        alert("Success"); 

       }, 
      }); 
} 

Чтобы достичь успеха, вы должны вернуть JsonResult или ContentResult или ActionResult от контроллера.

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