我在VS2013中创建了一个新的WebForms应用程序。我没有改变任何东西并创建了一个简单的页面。我想在用户点击按钮
时在客户端加载此表<table id="tblHelpRow">
<thead>
<tr class="title">
<th>F2
</th>
<th>F3
</th>
</tr>
</thead>
<tbody id="helpRowBody">
<%=MyRow %>
</tbody>
</table>
<asp:LinkButton ID="lnkEdit" runat="server" onclick="fnEdit();" />
这是我的脚本代码:
function fnEdit() {
BindGridView();
};
function BindGridView() {
rowid = {rowID:2};
$.ajax({
type: "POST",
url: "Default.aspx/GetRow",
contentType: "application/json; charset=utf-8",
data: param,
dataType: "json",
success: function (data) {
alert(data);
}
});
}
我的代码隐藏中有一个WebMethod,它将结果存储在公共属性中。 DataSource我存储在session中,但是我需要从jquery传递rowID。
[WebMethod]
public static string GetRow(int rowID)
{
DataTable dt = (DataTable)HttpContext.Current.Session["SourceData"];
MyRow = "<tr>" +
"<td>" + dt.Rows[rowID]["F2"].ToString() + "</td>" +
"<td>" + dt.Rows[rowID]["F3"].ToString() + "</td>" +
"</tr>";
return "done";
}
但我没有得到任何结果。当我把breakpont成功时,我得到了#34;身份验证失败&#34;错误,这个webmethod没有被执行。问题是什么?我没有更改ant身份验证设置。
答案 0 :(得分:1)
尝试删除ScriptMethod属性。您正在指定POST操作类型,但我相信ScriptMethod默认强制请求为GET。另外,我相信你的param需要是一个JSON字符串而不是一个整数:
var param = {rowID:2};
$.ajax({
type: "POST",
url: "Default.aspx/GetRow",
contentType: "application/json; charset=utf-8",
data: JSON.stringify(param),
dataType: "json",
success: function (data) {
alert(data);
}
});
答案 1 :(得分:1)
在我的VS2013网络表单项目中,罪魁祸首原来是:
var settings = new FriendlyUrlSettings {AutoRedirectMode = RedirectMode.Permanent};
使用FriendlyUruls的默认设置解决了问题 - 请勿使用RedirectMode.Permanent。
像这样的ajax调用,其中数据参数很复杂。
$.ajax({
type: "POST",
contentType: "application/json",
url: applicationBaseUrl + "mypage.aspx/Calc",
data: params // data is json
}).success(function (data, status, xhr) {
//...
}).error(function (xhr, status, error) {
//...
});
像这样的WebMethod
[WebMethod]
public static string Calc(IEnumerable<AiApp> aiApps, Guid guid)
{ //...
答案 2 :(得分:1)
使用
$.ajax({
type: "POST",
url: "Default.aspx/GetRow",
contentType: "application/json; charset=utf-8",
data: {rowID:2},
dataType: "json",
success: function (data) {
alert(data);
}
});