私は、AjaxでJqueryを使用して、コードで簡単なメソッドを呼び出そうとしています。しかし、毎回404 not found例外が発生します。残念ながら、これはWebフォームソリューションです。だから私はMVCのすべての特典を持っていません:(
Javascriptメソッドに入り、アラートを出しますが、私のc#メソッドには入りません。このJqueryメソッドを使用した以前の経験は、MVC Webサイトでの経験です。 webformsサイトと互換性がありますか?
私のJavascriptは:
$(document).ready(function() {
$('#btn_<%=UserStuff.tag %>').click(function() {
var value = $('#<%#Eval("tag") %>Twink').val();
something(value);
});
});
function something(theval) {
alert(theval);
$.ajax({
type: "POST",
url: "/Default.aspx/MyMethod?something=" + theval,
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
alert(msg);
}
});
}
}
そして、私のC#コードは次のとおりです。
public JsonResult MyMethod(string something)
{
JsonResult ret = new JsonResult();
return ret;
}
前もって感謝します。
メソッドはJsonResult
を返します。これはMVC固有であり、webformsアプリケーションでは使用できません。
古典的なWebFormsアプリケーションのコードビハインドでメソッドを呼び出す場合は、 PageMethods を使用できます。
[WebMethod]
public static string GetDate()
{
return DateTime.Now.ToString();
}
そして、メソッドを呼び出すには:
$.ajax({
type: 'POST',
url: 'PageName.aspx/GetDate',
data: '{ }',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function(msg) {
// Do something interesting here.
}
});
そして、これは私があなたのために書いた完全な実例です:
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Web.Services" %>
<script type="text/C#" runat="server">
[WebMethod]
public static string SayHello(string name)
{
return "Hello " + name;
}
</script>
<!DOCTYPE html>
<html>
<head>
<title></title>
<script type="text/javascript" src="/scripts/jquery-1.4.1.js"></script>
<script type="text/javascript">
$(function () {
$.ajax({
type: 'POST',
url: 'default.aspx/sayhello',
data: JSON.stringify({ name: 'John' }),
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (msg) {
// Notice that msg.d is used to retrieve the result object
alert(msg.d);
}
});
});
</script>
</head>
<body>
<form id="Form1" runat="server">
</form>
</body>
</html>
PageMethodsは、単純な引数型に限定されません。入力および出力として任意のタイプを使用できますが、自動的にJSONシリアル化されます。