【问题标题】:Unable to call a controller action method using Ajax无法使用 Ajax 调用控制器操作方法
【发布时间】:2014-05-02 09:57:22
【问题描述】:

我在 MVC4 中工作。 我有一个名为“Beauty”的控制器。它有两个动作方法,即“Action1”和“Action2”。 我的视图名称是 Action1。 现在在我看来,我有两个 div。单击第一个 div 时,通过 AJAX 我在控制器中调用“Action1”方法。这工作正常,即我可以点击动作方法“Action1”。 当我单击第二个 div 并尝试通过 AJAX 调用第二个操作方法“Action2”时,我根本无法点击 Action2 方法。

控制器

public class BeautyController : Controller 
{ 
   [HttpPost] public JsonResult Action1(string option1) 
   { 
      return Json("true"); 
   }     

   [HttpPost] public JsonResult Action2(string option2)
   {
      return Json("true"); 
   }
}

Ajax

function Question1(Answers) {
   var url = '@Url.Action("Action1", "Beauty")'; 
   var Data = Answers;

   if (url != null && url != undefined && Data != null && Data != undefined) {
      $.ajax({ url: url,
               dataType: "json",
               type: "POST", 
               data: { 'option': Answers },
               contentType: 'application/json; charset=utf-8', 
               success: function (result) {
                  if (result != null && result != undefined && result == "true")
                  { 
                     alert("Successfully Inserted!"); 
                  }
               },
               error: function (result) {
                  alert("error"); 
               } 
       });
   }
}

你能帮我找出问题并解决它吗?

谢谢, 普里亚。

【问题讨论】:

  • 请出示一些代码,Priya
  • 嗨 Dumisani,我的控制器是 public class BeautyController : Controller { [HttpPost] public JsonResult Action1(string option1) { return Json("true"); } [HttpPost] public JsonResult Action2(string option2) { return Json("true"); } } 和我的 AjAX 在下面的评论中调用
  • 函数 Question1(Answers) {var url = '@Url.Action("Action1", "Beauty")'; var Data = Answers;if (url != null && url != undefined && Data != null && Data != undefined) {$.ajax({ url: url, dataType: "json",type: "POST", data : { 'option': Answers }, contentType: 'application/json; charset=utf-8', 成功: function (result) {if (result != null && result != undefined && result == "true") { alert("插入成功!"); } },error: function (result) { alert("error"); } });}}
  • 您是说当您将@Url.Action("Action1", "Beauty") 更改为@Url.Action("Action2", "Beauty") 时没有任何反应?
  • 是的杜米萨尼。我试了调试,控制根本不去Action2。

标签: ajax asp.net-mvc-4 controller action


【解决方案1】:

您已将 URL 硬编码为 action1

 var url = '@Url.Action("Action1", "Beauty")'; 

如果您希望它调用 Action2,您需要将其更改为:

 var url = '@Url.Action("Action2", "Beauty")'; 

但是那只会调用操作 2。

我建议您考虑在有问题的 div 上使用数据属性。

所以是这样的:

 <div id="div1" data-url="@Url.Action("Action1", "Beauty")">
     //Div content here
 </div>

 <div id="div2" data-url="@Url.Action("Action2", "Beauty")">
     //Div content here
 </div>

然后,无论您从哪里调用该函数,我都在猜测单击事件。你会有一些像这样的 jQuery:

 var url = $(this).data("url");

然后你将把它传递给你的问题函数,这样它就会变成这样的东西:

 function Question1(Answers, url) {
   var Data = Answers;
   if (url != null && url != undefined && Data != null && Data != undefined) {
   $.ajax({ url: url,
           dataType: "json",
           type: "POST", 
           data: { 'option': Answers },
           contentType: 'application/json; charset=utf-8', 
           success: function (result) {
              if (result != null && result != undefined && result == "true")
              { 
                 alert("Successfully Inserted!"); 
              }
           },
           error: function (result) {
              alert("error"); 
           } 
       });
       }
     }

这个答案显然是基于您在上面提供的信息和一些假设。

【讨论】:

    猜你喜欢
    • 2020-10-13
    • 2014-07-27
    • 1970-01-01
    • 2021-05-22
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    相关资源
    最近更新 更多