无法在静态方法内调用Response.Redirect

时间:2013-06-12 19:07:26

标签: c# javascript asp.net ajax static-methods

您好我正在尝试使用aspx页面中的ajax运行webmethod。基本上我想用一个查询字符串重定向到另一个aspx页面,但我想从<a href>进行,因为它是jquery菜单的一部分。

从我学到的东西我只能使用ajax来调用静态webmethods,但我可以从我的静态函数中重定向。

visual studio将其标记为红色,表示:“非静态字段方法或属性需要对象引用System.Web.HttpResponse.Redirect(string)”

这里是ajax调用:

function redirect_to_profile() {
    $.ajax({
        type: "POST",
        url: "personal_profile.aspx.cs.aspx/redirect_to_profile",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (res) {
           alert("success");
        },
        error: function (res, msg, code) {
            // log the error to the console
        } //error
    });
}

这是a href:

<a  onclick="redirect_to_profile()">Personal Profile</a>

这里是personal_profile.aspx中的webmethod

[WebMethod]
public static void redirect_to_profile()
{

    dbservices db=new dbservices();
    string user = HttpContext.Current.User.Identity.Name;
    string id = db.return_id_by_user(user);

    HttpResponse.Redirect("personal_profile.aspx?id="+id);
}

4 个答案:

答案 0 :(得分:21)

您需要将构造的URL返回给客户端:

public static string redirect_to_profile()
{
    dbservices db=new dbservices();
    string user = HttpContext.Current.User.Identity.Name;
    string id = db.return_id_by_user(user);
    return "personal_profile.aspx?id="+id;
}

然后使用JavaScript,在AJAX调用的success函数中,设置位置:

window.location = res;

或者也许:

window.location = res.d;

答案 1 :(得分:3)

您需要让您的Web方法传回要重定向到其配置文件的用户的ID,然后在您的jQuery成功回调中将window.location设置为路径加上查询字符串,如下所示:

function redirect_to_profile() {
    $.ajax({
        type: "POST",
        url: "personal_profile.aspx.cs.aspx/redirect_to_profile",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (res) {
            // Redirect to personal_profile.aspx passing it the ID we got back from the web method call
            window.location = "personal_profile.aspx?id=" + res;
        },
        error: function (res, msg, code) {
            // log the error to the console
        } //error
    });
}

[WebMethod]
public static string redirect_to_profile()
{
    dbservices db=new dbservices();
    string user = HttpContext.Current.User.Identity.Name;
    return db.return_id_by_user(user);
}

答案 2 :(得分:2)

您可以将您生成的此网址发送给您Javascript(响应ajax调用),然后使用Javascript代码重定向,而不是使用HttpResponse.Redirect。

答案 3 :(得分:0)

试试这个:

function myFun(a) {
            var s = null;
            var em = document.getElementById(a + 'productno');
            if (em != null)
                PageMethods.setSession(em.innerText);
            window.location.assign("/Product%20Details.aspx");


        }