2010-11-13 70 views
0

嗨 我是新来的MVC和jQuery,我遵循我在网上找到的例子,但我坚持 我有img元素在我的网页上我试图通过jQuery单击事件添加,然后从我的控制器调用操作。.net MVC2 jQuery不能从控制器调用动作

我的页面

<asp:Content ID="aboutContent" ContentPlaceHolderID="MainContent" runat="server"> 
<h2>About</h2> 
<p> 
    Put content here. 
</p> 
<img id="img1" alt="some image" src="http://www.google.pl/logos/2010/stevenson10-hp.jpg" /> 

<script type="text/javascript" language="javascript"> 
    $("#img1").click(function (e) { 
     $.ajax({ 
      type: "POST", 
      url: "Home/CheckAge", 
      data: "{}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      async: true, 
      cache: false, 
      success: function (msg) { 
       alert("ok"); 
      }, 
      error: function (XMLHttpRequest, textStatus, errorThrown) { 
       alert(textStatus+" - "+errorThrown); 
      } 
     }); 
     return false; 
    });  
</script> 

事件被添加,但是当我点击图片我总是最后的误差函数 并提醒说:“错误 - 未定义”

我的控制器看起来像这样

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     ViewData["Message"] = "Welcome to ASP.NET MVC!"; 
     return View(); 
    } 

    public ActionResult About() 
    { 
     return View(); 
    } 

    public static string Test() 
    { 
     string name = "aaa"; 
     return "Hello " + name; 
    } 

    [HttpPost] 
    public JsonResult CheckAge(String code) 
    { 
     return Json("abc"); 
    } 
} 

我试过很多组合和很多例子,但结果总是一样的 任何想法我在做什么错? 我使用的Visual Web Developer 2010速成

THX你的建议

回答

3

你CheckAge方法需要一个参数:

[HttpPost] 
public JsonResult CheckAge(String code) 
{ 
    return Json("abc"); 
} 

但你不传递参数在AJAX:

data: "{}", 

您还需要包装脚本代码在$(document).ready()

$(document).ready(function() { 
    $("#img1").click(function (e) { 
     $.ajax({ 
      type: "POST", 
      url: "Home/CheckAge", 
      data: {code: "theCode"}, 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      async: true, 
      cache: false, 
      success: function (msg) { 
       alert("ok"); 
      }, 
      error: function (XMLHttpRequest, textStatus, errorThrown) { 
       alert(textStatus+" - "+errorThrown); 
      } 
     }); 
     return false; 
    }); 
}); 
0

您正在设置contentType = application/json作为请求,但控制器上没有任何东西可以理解这一点。默认模型联编程序仅适用于标准查询字符串参数(application/form-url-encoded)。所以,你可以试试这个:

$('#img1').click(function (e) { 
    $.ajax({ 
     type: 'POST', 
     url: '<%= Url.Action("CheckAge") %>', 
     data: { code: 'some code you want to send' }, 
     dataType: 'json', 
     cache: false, 
     success: function (msg) { 
      alert(msg.result); 
     }, 
     error: function (XMLHttpRequest, textStatus, errorThrown) { 
      alert(textStatus+" - "+errorThrown); 
     } 
    }); 
    return false; 
}); 

而控制器动作:

[HttpPost] 
public ActionResult CheckAge(string code) 
{ 
    return Json(new { result = "abc" }); 
} 

注意将contentType如何不再使用,数据散列包含将被发送到控制器动作的代码参数该网址不再硬编码,但使用网址助手来计算它。此外,控制器操作使用匿名对象返回JSON。

相关问题