ashx的使用!!

powerchuangwai 2011-01-19 09:06:44

求一个示例:

要求:

(1)ashx调用后台类,构造方法供前台调用 ;

(2)前台页面以ajax方式调用ashx获取数据。


谢谢了。


...全文
2002 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dotnet201 的回复:]
ashx文件属于aspx文件类型的一种。只有后台处理,没有前台界面。
[/Quote]

不论是aspx还是ashx,在向浏览器端输出html时是完全一样的,不存在ashx就不输出正规html的说法。
jianshao810 2011-01-20
  • 打赏
  • 举报
回复

<%@ WebHandler Language="C#" Class="ashx" %>

using System;
using System.Data;
using System.Web;
using System.Text;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using Newtonsoft.Json;
using JqueryGrid;

public class ashx : IHttpHandler
{

public void ProcessRequest(HttpContext context)
{
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);

if ("" != null) //可以作为权限判断
{
int page = 1;
int rp = 10;
string sortname = "id";
string sortorder = "asc";
string where = "1=1";

//page params
if (!string.IsNullOrEmpty(context.Request["page"]))
page = int.Parse(context.Request["page"].ToString());

if (!string.IsNullOrEmpty(context.Request["rp"]))
rp = int.Parse(context.Request["rp"].ToString());

//sort params
if (!string.IsNullOrEmpty(context.Request["sortname"]))
sortname = context.Request["sortname"].ToString();

if (!string.IsNullOrEmpty(context.Request["sortorder"]))
sortorder = context.Request["sortorder"].ToString();


//filter params
/*
if (context.Request["id"] != null && context.Request["id"].ToString() != "")
where += " and id='" + context.Request["id"].ToString() + "'";

if (context.Request["title"] != null && context.Request["title"].ToString() != "")
where += " and title='" + context.Request["title"].ToString() + "'";

if (context.Request["keyword"] != null && context.Request["keyword"].ToString() != "")
where += " and keyword='" + context.Request["keyword"].ToString() + "'";

if (context.Request["url"] != null && context.Request["url"].ToString() != "")
where += " and url='" + context.Request["url"].ToString() + "'";

if (context.Request["description"] != null && context.Request["description"].ToString() != "")
where += " and description='" + context.Request["description"].ToString() + "'";
*/
DBHelper dbhelper = new DBHelper();
string sql = "select * from links";
DataSet ds = dbhelper.GetDataSet(sql);

if (ds.Tables[0].Rows.Count > 0)
{

string sort = " " + sortname + " " + sortorder; //排序表达式
DataRow[] rowArray = ds.Tables[0].Select(where, sort);
if (rowArray.Length != 0)
{
int pages = (rowArray.Length % rp != 0) ? (rowArray.Length / rp + 1) : (rowArray.Length / rp);
string[] jsonArr = new string[pages];

for (int i = 1; i <= pages; i++)
{
StringBuilder sb = new StringBuilder();
sb.Append("{\n");
sb.Append("page: " + i.ToString() + ",\n");
sb.Append("pages: " + pages + ",\n");
sb.Append("total: " + rowArray.Length + ",\n");
sb.Append("rows: [");

bool rc = false;
for (int j = (i - 1) * rp; j < i * rp; j++)
{
if (j < rowArray.Length)
{
DataRow dr = rowArray[j];
if (rc)
sb.Append(",");
sb.Append("\n{");
sb.Append("id:'" + dr["id"].ToString() + "',");
sb.Append("cell:['" + dr["id"].ToString() + "'");
sb.Append(",'" + dr["title"].ToString() + "'");
sb.Append(",'" + dr["keyword"].ToString() + "'");

if (dr["id"].ToString() != "")
sb.Append(",'" + dr["url"].ToString() + "'");
else
sb.Append(",' '");

sb.Append(",'" + dr["description"].ToString() + "']");

sb.Append("}");
rc = true;
}
else
break;

}

sb.Append("],\n");

sb.Append(BuildParams(ds));

sb.Append("}");

jsonArr[i - 1] = sb.ToString();

}
context.Response.ContentType = "text/plain";
context.Response.Write(JsonConvert.DeserializeObject(jsonArr[page - 1])); //格式化成JSON数据输出
}
else
{
StringBuilder sb1 = new StringBuilder();
sb1.Append("{\n page:1,\ntotal:0,\npages:1,rows:'',");
sb1.Append(BuildParams(ds));
sb1.Append("}");

context.Response.ContentType = "text/plain";
context.Response.Write(JsonConvert.DeserializeObject(sb1.ToString()));
}
}
else
{
context.Response.ContentType = "text/plain";
context.Response.Write(JsonConvert.DeserializeObject("{\n page:1,\ntotal:0,pages:1,rows:'',cols:''}"));
}
}
else
{
context.Response.ContentType = "text/plain";
context.Response.Write("-1"); //输出-1,向JQUERY插件提示用户没有权限
}
}
public bool IsReusable
{
get
{
return false;
}
}

/// <summary>
/// 绑定抬头行和过滤行数据
/// </summary>
/// <param name="ds"></param>
/// <returns></returns>
private string BuildParams(DataSet ds)
{
StringBuilder sb = new StringBuilder();
sb.Append("cols: [\n");

sb.Append("{display:'ID',name:'id',className:'IDDiv',sortable:true},\n");
sb.Append("{display:'Title',name:'title',className:'titleDiv',sortable:true},\n");
sb.Append("{display:'Keywords',name:'keyword',className:'kewordDiv',sortable:true},\n");
sb.Append("{display:'Url',name:'url',className:'urlDiv',sortable:true},\n");
sb.Append("{display:'Description',name:'description',className:'descriptionDiv',sortable:true},\n");
sb.Append("],\n");

sb.Append("id:[");
sb.Append(Filter.SelectDistinct(ds.Tables[0], "id"));
sb.Append("],\n");

sb.Append("title:[");
// sb.Append(Filter.SelectDistinct(ds.Tables[0], "title"));
sb.Append("],\n");

sb.Append("keyword:[");
//sb.Append(Filter.SelectDistinct(ds.Tables[0], "keyword"));
sb.Append("],\n");

sb.Append("url:[");
// sb.Append(Filter.SelectDistinct(ds.Tables[0], "url"));
sb.Append("],\n");

sb.Append("description:[");
// sb.Append(Filter.SelectDistinct(ds.Tables[0], "description"));
sb.Append("]\n");

return sb.ToString();
}
}


<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="TestPage_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>

<style type="text/css">
body
{
font-size: 12px;
font-family: Arial;
}
</style>
<link href="../Styles/jqGrid/jquery.css" rel="stylesheet" type="text/css" />
<script src="../Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
<script src="../Scripts/AxioGrid.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function () {
$("#jqueryData").AxioGrid({
method:"Get",
url: "/Ashx/ashx.ashx",
itembuttons: [{ name: "Edit", displayname: "Edit", className: "editButton", bthclass: "bthclass", bthname: "Edit", onclick: editItems }, { name: "Delete", displayname: "Del", className: "deleteButton", bthclass: "bthclass", bthname: "Delete", onclick: editItems}],
rp: 10//,
//filterable: true,
//filter: [{ name: "id", value: "" }, { name: "title", value: "" }, { name: "keyword", value: "" }, { name: "url", value: "" }, { name: "description", value: ""}]
});

});

function editItems(com, id, p) {
debugger
if (com == "Edit") {
alert(id);
}
if (com == "Delete") {
var r = confirm("Would you delete the user of the user code is \"" + id + "\"");
if (r) {

}
}
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div id="jqueryData"></div>
</form>
</body>
</html>

powerchuangwai 2011-01-20
  • 打赏
  • 举报
回复
个人理解ashx更多的是一种接口。
Jack2013tong 2011-01-20
  • 打赏
  • 举报
回复
aspx与ashx的处理机制应该不尽相同,虽然对用户来说效果是一样的,据说象这种应用ashx能获得更好的性能
R_zhanche 2011-01-20
  • 打赏
  • 举报
回复
atmo 2011-01-20
  • 打赏
  • 举报
回复
ashx只是没有对应的.aspx文件
bestdowt1314 2011-01-20
  • 打赏
  • 举报
回复
http://blog.csdn.net/bestdowt1314/archive/2009/08/17/4457298.aspx

jquery+ajax+ashx实现的一个简单ajax 效果
dotnet201 2011-01-19
  • 打赏
  • 举报
回复
ashx文件属于aspx文件类型的一种。只有后台处理,没有前台界面。是程序员能够专注于后台编程,而不管前台的web。.ashx对应的类继承于IHttpHandler。

如,有这样的这样aspx中有这样一个javascript脚本:
$.ajax({
type: "GET",
url: "AjaxCode/getClientName.ashx",
dataType: "text",
data: "key=" + escape(textInput.value),
cache: false,
success: function(txt) {
//do something
}
});

这个文件是请求的getClientName.ashx。
所以在getClientName.ashx文件中,有相应的操作。
getClientName.ashx 文件中code如下:

<%@ WebHandler Language="C#" Class="getClientName" %>

using System;
using System.Web;

public class getClientName : IHttpHandler
{

public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
if (string.IsNullOrEmpty(context.Request["key"]))
{
context.Response.Write("error");
}
else
{
string key = context.Request["key"].ToString().Trim();
string sql = " select cid,rtrim(clientName) as [name] from clientInfo "
+ " where charindex('" + key + "',rtrim(clientName)) > 0 for xml auto,root('yoolo')";
object json = DBCenter.dbcenter.ExecuteXmlReader(sql);
context.Response.Write(json);
}


context.Response.End();
}

public bool IsReusable
{
get
{
return false;
}
}
}
希望对你有所帮助..
powerchuangwai 2011-01-19
  • 打赏
  • 举报
回复
谢谢,只是没有看太明白。
wuyq11 2011-01-19
  • 打赏
  • 举报
回复
var url = "Handler .ashx?Id=" + ID.value;
xmlHttp.open("GET", url, true);
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {
var result=xmlHttp.responseText;
var json=eval("("+result+")");
}
}
};
xmlHttp.send(null);
}
}
public class Handler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
...

}

public bool IsReusable
{
get
{
return false;
}
}

}

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧