簡體   English   中英

通過使用jQuery Ajax調用C#函數來實現內部服務器錯誤

[英]Internal Server Error by calling C# function with jQuery Ajax

在我的應用程序中,我有兩個ImageButtons。 在他們的OnClientClick事件中,我將js函數稱為js函數。 作為參數,我給出“ en”或“ de”之類的字符串。

JavaScript代碼:

    //Blocks the submit of the form and changes the language
    function changeLanguage(languageIdentifier)
    {
        var pageUrl = '<%= ResolveUrl("default.aspx/changeLanguage") %>';
        var parameter = '{ "languageIdentifier": languageIdentifier }';

        //Call the C# Methods
        $.ajax({ type: "POST", url: pageUrl, data: parameter, contentType: "application/json; charset=utf-8", dataType: "json", failure: function (response) { alert(response.data) } }).done(function () { alert("Language was changed.") }).fail(function (jqXHR, errorText, errorThrown) { alert("An error has occurred: " + errorThrown); });

        return false;
    }

C#代碼:

    [System.Web.Services.WebMethod]
    public static bool changeLanguage(string languageIdentifier)
    {
        try
        {
            //Get the whole formular
            Page thisPage = (Page)HttpContext.Current.Handler;
            //Get the informations from the formular
            Brain.UserRequest = _default.getUserGivenInformation(thisPage);

            //Change session values
            switch (languageIdentifier)
            {
                case "DE":
                case "de-DE":
                case "de": HttpContext.Current.Session["uiculture"] = "de";
                    HttpContext.Current.Session["culture"] = "de-DE";
                    break;
                case "EN":
                case "en-GB":
                case "en":
                default: HttpContext.Current.Session["uiculture"] = "en";
                    HttpContext.Current.Session["culture"] = "en-GB";
                    break;
            }

            //Reloads the page
            HttpContext.Current.Server.Transfer(HttpContext.Current.Request.Url.PathAndQuery, false);

            return true;
        }
        catch 
        {
            return false;
        }
    }

單擊ImageButton后,將不會調用C#方法。 僅顯示錯誤消息,例如“發生錯誤:內部服務器錯誤”。 有人知道為什么會有問題嗎?

編輯:

現在,我替換了HttpContext.Current.Server.Transfer代碼,並插入了兩個響應寫入方法。

    [System.Web.Services.WebMethod]
    public static string changeLanguage(string languageIdentifier) 
    {
        HttpContext.Current.Response.Write("Test #default.changeLanguage");

        try
        {
            //Get the whole formular
            Page thisPage = (Page)HttpContext.Current.Handler;
            //Get the informations from the formular
            Brain.UserRequest = _default.getUserGivenInformation(thisPage);

            //Change session values
            switch (languageIdentifier)
            {
                case "DE":
                case "de-DE":
                case "de": HttpContext.Current.Session["uiculture"] = "de";
                    HttpContext.Current.Session["culture"] = "de-DE";
                    break;
                case "EN":
                case "en-GB":
                case "en":
                default: HttpContext.Current.Session["uiculture"] = "en";
                    HttpContext.Current.Session["culture"] = "en-GB";
                    break;
            }

            //Create url for redirecting
            string url = HttpContext.Current.Request.Url.AbsoluteUri;

            return url;
        }
        catch (Exception e)
        {
            HttpContext.Current.Response.Write(e.Message + " #default.changeLanguage");
            return "";
        }
    }

但是不會出現C#代碼中的失敗者。 我從Chrome找到了此錯誤消息

Onedrive上的故障圖片

對我來說,它似乎找不到C#函數。


JavaScript代碼

function changeLanguage(languageIdentifier) {
        var pageUrl = '<%= ResolveUrl("/demo.aspx/changeLanguage") %>';
        var params={};
        params.languageIdentifier=languageIdentifier;
        var jsonString = JSON.stringify(params);

        //Call the C# Methods
        $.ajax({
            type: "POST",
            url: pageUrl,
            data: jsonString,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function () {
                alert("Language was changed.");
            }
        })

        return false;
    }

.aspx代碼

<div>
        <asp:ImageButton ID="imgbutn" runat="server" Height="50" Width="50" OnClientClick="return changeLanguage('en')" />
    </div>

頁面后面的代碼

 protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack) // to check page is post back or not
        {
            // do stuff here


        }

        if (Request.Headers["X-Requested-With"] == "XMLHttpRequest")  // this is to check whether it's an AJAX call or not
        {
            // do stuff here..
        }
    }

    [System.Web.Services.WebMethod]
    public static bool changeLanguage(string languageIdentifier)
    {
        // do logic here....
        return true;
    }

我只是檢查了它的工作狀況。 希望對您有幫助。

暫無
暫無

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

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