在视图中从javascript调用控制器操作

时间:2015-05-12 12:39:53

标签: javascript jquery asp.net

我想使用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.Action,但这个破坏了脚本代码并确认消息没有显示。 当我按照此处所示编写它时: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>
    }
没有改变。它显示确认对话框,但不显示调用方法

3 个答案:

答案 0 :(得分:0)

除非您使用Ajax或其他客户端机制与服务器通信,否则JavaScript无法调用控制器操作!

您需要使用xhr来获取服务器或使用以下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库

答案 1 :(得分:0)

如果我理解正确,你想通过javascript在控制器中调用你的Action方法。并在成功时显示确认信息。

以下是代码:

 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。

答案 2 :(得分:0)

您需要将代码更改为此类型。在这种情况下,您可以调用: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
}