我遇到一些问题将我的Javascript对象数组发布到C#Codebehind。我遵循了一个简单的教程,并认为这可以很好地工作,但PassThings
中的C#代码隐藏断点永远不会被击中。
我尝试将网址更改为" Default.aspx / PassThings"但它仍然永远不会被发布到我的代码后面,错误提示会显示" [object object"]
这是我的客户方:
Default.aspx的
脚本
<script>
function Save() {
$(document).ready(function () {
var things = [
{ id: 1, color: 'yellow' },
{ id: 2, color: 'blue' },
{ id: 3, color: 'red' }
];
things = JSON.stringify({ 'things': things });
$.ajax({
contentType: 'application/json; charset=utf-8',
dataType: 'json',
type: 'POST',
url: '/PassThings',
data: things,
success: function () {
alert("success");
},
error: function (response) {
alert(response);
}
});
});
}
</script>
HTML
<input type="button" value="Pass Things" onclick="JavaScript: Save();">
Default.aspx.cs
代码隐藏
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Web.Services;
[System.Web.Script.Services.ScriptService]
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
[WebMethod]
public void PassThings(List<Thing> things)
{
var t = things;
}
public class Thing
{
public int Id { get; set; }
public string Color { get; set; }
}
}
有人看到我做错了吗?
感谢您的时间。
答案 0 :(得分:5)
在url
传递带网页的正确网址。假设PassThings
方法位于文件后面的Default.aspx
页面代码中,那么如果脚本代码写在默认值中,则必须传递 url:Default.aspx / PassThings 的.aspx 强>
如果脚本位于 Scripts 文件夹中的单独js文件中,则必须返回一个目录并且必须写入: url:../ Default.aspx / PassThings强>
$(document).ready(function () {
var things = [{
id: 1,
color: 'yellow'
}, {
id: 2,
color: 'blue'
}, {
id: 3,
color: 'red'
}];
things = JSON.stringify({
'things': things
});
$.ajax({
contentType: 'application/json; charset=utf-8',
dataType: 'json',
type: 'POST',
url: 'Default.aspx/PassThings',
data: things,
success: function () {
alert("success");
},
error: function (response) {
alert(JSON.stringify(response));
}
});
});
并且在您的方法后面的代码中应该使用[WebMethod]
进行修饰,它应该是public
和static
:
[WebMethod]
public static void PassThings(List<Thing> things)
{
var t = things;
}