![](/img/trans.png)
[英]Jquery $ajax funtion returns 500 Internal Server Error in C#
[英]Internal Server Error by calling C# function with jQuery Ajax
在我的應用程序中,我有兩個ImageButtons。 在他們的OnClientClick事件中,我將js函數稱為js函數。 作為參數,我給出“ en”或“ de”之類的字符串。
//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;
}
[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找到了此錯誤消息
對我來說,它似乎找不到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.