簡體   English   中英

通過Ajax調用ac#方法而不使用靜態方法

[英]Calling a c# method trough Ajax without using static methods

我正在一個必須使用ajax的網站,並且想知道是否存在一種從服務器端調用方法而不將方法設置為靜態的方法。 我對此進行了研究,但是發現的每個示例都將方法設置為靜態,並且想知道是否可以通過使用靜態來實現,這是我的代碼

Ajax代碼:

function GetAddColour(id, Name) {

    var dataValue = { "id": id, "Name": Name }

    $.ajax({
        url: "AddColour.aspx/btnAddColour",
        type: "POST",
        dataType: "json",
        data: dataValue,
        contentType: "application/json; charset=utf-8",
        success: function (msg) {
            alert("Success");
        },
        error: function (e) {
            alert(JSON.stringify(e));
        }
    });
}

C#代碼:

[WebMethod]
public static void btnAddColour(int id, string Name)
{
    //do things to add colour
}

有沒有靜態方法的方法,我也不能使用更新面板。

使用ASP.NET AJAX頁面方法,您可以訪問Session對象,因此,如果將登錄的用戶名存儲在Session["User"] ,則可以執行以下操作:

后台代碼:

[WebMethod(EnableSession = true)]
public static string GetLoggedInUserName()
{
    return HttpContext.Current.Session["User"].ToString();
}

標記:

$.ajax({
    url: "AddColour.aspx/GetLoggedInUserName",
    type: "POST",
    dataType: "json",
    data: "{}",
    contentType: "application/json; charset=utf-8",
    success: function (result) {
        if (result.hasOwnProperty("d")) {
            // Need to de-reference the JSON via the .d
            alert(result.d);
        }
        else
        {
            // No .d; no de-reference necessary
            alert(result);
        }
    },
    error: function (e) {
        alert(JSON.stringify(e));
    }
});

注意: .d語法是Microsoft在ASP.NET AJAX的ASP.NET 3.5版本中.d的反XSS保護。 因此檢查以查看.d屬性是否存在。

假設您使用的是Web表單而不是ASP.Net MVC,則可以創建一個*.ashx HttpHandler。 它就像一個*.aspx頁面,但簡單得多。 您的背后代碼僅需實現IHttpHandler接口(1個方法, ProcessRequest()和1個屬性IsReusable )。 如果您需要訪問會話狀態,則還需要“實現”(使用錯誤的名稱,因為它們都是沒有實現的標記接口),或者是IReadonlySessionState (只讀訪問)或IRequiresSessionState (讀/寫訪問)。

但是,您要負責這里幾乎所有的事情,從湯到堅果。 您可以隨心所欲地返回JSON,二進制圖像數據。

修改您的數據值對此。

var dataValue = "{id :'" + id + ", Name :'"+ Name "'}" ;

其中id和name是兩個分別具有整數和字符串值的變量。 確保id為整數,如果不是,則將其更改為Number(id)

Javascript:

function GetAddColour(eid, eName) {
   var id = Number(eid);
   var Name = eName;
   var dataValue = "{id :'" + id + ", Name :'"+ Name "'}" ;
    $.ajax({
           url: "AddColour.aspx/btnAddColour",
           type: "POST",
           dataType: "json",
           data: dataValue,
           contentType: "application/json; charset=utf-8",
           success: function (msg) {
                alert("Success");
           },
           error: function () { alert(arguments[2]); }      
        });
 }

並且您的C#網絡方法應該是

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static void btnAddColour(int id, string Name)
{
    // Your code here
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM