0

我在 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,它将结果存储在公共属性中。我存储在会话中的数据源,但我需要从 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";
    }

但我没有得到任何结果。当我成功放置断点时,出现“身份验证失败”错误,并且此 webmethod 未执行。有什么问题?我没有更改 ant 身份验证设置。

4

3 回答 3

1

在我的 VS2013 Web 表单项目中,罪魁祸首原来是:

var settings = new FriendlyUrlSettings {AutoRedirectMode = RedirectMode.Permanent};

使用 FriendlyUrules 的默认设置解决了这个问题——不要使用 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)
    { //...
于 2014-03-25T21:33:58.540 回答
1

利用

$.ajax({
        type: "POST",
        url: "Default.aspx/GetRow",
        contentType: "application/json; charset=utf-8",
        data: {rowID:2},
        dataType: "json",
        success: function (data) {
             alert(data);
        }
    });
于 2014-12-17T06:38:03.850 回答
1

尝试删除 ScriptMethod 属性。您正在指定 POST 操作类型,但我相信 ScriptMethod 默认情况下会强制请求为 GET。另外,我相信你的参数需要是一个 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);
    }
});
于 2013-11-12T17:43:42.517 回答