C# 请求。表单发布变量为空
我已经使用浏览器调试器/网络监视器验证了我正在AJAX调用中发送一个名为“search”的变量,并且在监视器中它在标题中显示为“search=test”。我试图在代码中访问此变量,但似乎找不到它?这是我的前端和后端代码,我遗漏了什么吗 代码隐藏:C# 请求。表单发布变量为空,c#,.net,ajax,C#,.net,Ajax,我已经使用浏览器调试器/网络监视器验证了我正在AJAX调用中发送一个名为“search”的变量,并且在监视器中它在标题中显示为“search=test”。我试图在代码中访问此变量,但似乎找不到它?这是我的前端和后端代码,我遗漏了什么吗 代码隐藏: public class AJAXSearchLog : IHttpHandler { public void ProcessRequest (HttpContext context) { context.Response.C
public class AJAXSearchLog : IHttpHandler {
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "text/plain";
string searchTerm = Convert.ToString(HttpContext.Current.Request.Form["search"]);
if(!string.IsNullOrEmpty(searchTerm)){
AspDotNetStorefrontCore.DB.ExecuteSQL("insert into TribSearch(SearchTerm,CustomerID,LocaleSetting) values(" + DB.SQuote(CommonLogic.Ellipses(searchTerm, 97, true)) + "," + '0' + "," + DB.SQuote("en-us") + ")");
}
context.Response.Clear();
context.Response.Write(searchTerm);
context.Response.End();
}
public bool IsReusable {
get {
return false;
}
}
}
前端
window.onbeforeunload = function(e) {
if ($("#searchBox_text").val().length >= 2) {
var _search = $("#searchBox_text").val();
var url = "/AJAXSearchLog.ashx";
$.ajax({
async: false,
type: 'POST',
url: url,
data: {'search': _search},
contentType: 'application/json;',
dataType: 'json',
success: function(result) {
alert(result);
},
error: function(xhr, textStatus, errorThrown) {
console.log('error');
}
});
}
};
我发现当
contentType
设置为“application/json”时,数据没有通过。此外,要读取POST变量,需要使用Request.Params[]
。以下是我更改的两行代码:
在前端-
contentType:'application/x-www-form-urlencoded;字符集=UTF-8',
在后端-
stringsearchTerm=Convert.ToString(context.Request.Params[“search”])代码>这不太可能是原因,但查询HttpContext.Current.Request.Form而不是context.Request.Form似乎不太合适。如果在处理程序代码中设置断点,调试时是否会拾取它?如果没有,请确保您已在web.config文件中正确注册了处理程序。@NeilMoss我能够成功地命中代码中的断点,但它只是将我指定为Request.Form[“search”]
的字符串读取为null。谢谢!您列出的内容类型是我缺少的内容类型。我发现使用context.Request.Form[“search”]
也可以做到这一点。