heyjob.net 招聘网开发日志 之 搜索页(aspnetpager+存储过程分页)
一个通宵到现在,其实要做的不多,难再算法方面,还有页面的样式,一改再改,没办法,写了几个hack,终于兼容ie678,ff,chrome,至于opera和safari那些非主流浏览器直接忽略不计。。
使用了存储过程+视图,2个表,一个是职位表,一个是公司表,代码以后还会继续优化!
初步效果图: 这个是全文搜索 (职位名+职位描述+公司名)
页面传值
js
<script type="text/javascript">
function search_job(){
var tkey = "";
var rbt = "";
var hpro = "";
var hct = "";
var hjt = "";
var hpr = "";
var dcn = "";
var dcn = "";
var dir = "";
var dcs = "";
var dvd = "";
var dwm = "";
var dei = "";
var dwr = "";
tkey = escape($("#txtkey").val()); //关键字
//搜索类型
if($("#rbt2").attr("checked") == true)
rbt = "1";
if($("#rbt3").attr("checked") == true)
rbt = "2";
if($("#hidprovince").val() != "不限")
hpro = $("#hidprovince").val(); //省id
if($("#hidcity").val() != "不限")
hct = $("#hidcity").val(); //市id
if($("#hidjobt2").val() != "不限")
hjt = $("#hidjobt2").val(); //职位id
if($("#hidprop").val() != "不限")
hpr = $("#hidprop").val(); //行业id
if($("#ddlCONature").val() != "不限")
dcn = escape($("#ddlCONature").val()); //公司性质
if($("#ddlIncomeRange").val() != "不限")
dir = escape($("#ddlIncomeRange").val()); //薪酬范围
if($("#ddlCoScale").val() != "不限")
dcs = escape($("#ddlCoScale").val()); //公司规模
if($("#slvldday").val() != "")
dvd = $("#slvldday").val(); //发布时间
if($("#ddlWorkMode").val() != "不限")
dwm = escape($("#ddlWorkMode").val()); //职位性质
if($("#ddlEduID").val() != "不限")
dei = escape($("#ddlEduID").val()); //学历
if($("#ddlWorkRange").val() != "不限")
dwr = escape($("#ddlWorkRange").val()); //工作经验
urlstr = "search_index.aspx?show=result&tkey="+ tkey + "&rbt=" +rbt + "&hpro="+ hpro + "&hct=" + hct + "&hjt=" + hjt + "&hpr=" + hpr + "&dir=" + dir + "&dcn=" + dcn + "&dcs=" + dcs + "&dvd=" + dvd + "&dwm=" + dwm + "&dei=" + dei + "&dwr=" + dwr;
window.location.href =(urlstr);
}
</script>
function search_job(){
var tkey = "";
var rbt = "";
var hpro = "";
var hct = "";
var hjt = "";
var hpr = "";
var dcn = "";
var dcn = "";
var dir = "";
var dcs = "";
var dvd = "";
var dwm = "";
var dei = "";
var dwr = "";
tkey = escape($("#txtkey").val()); //关键字
//搜索类型
if($("#rbt2").attr("checked") == true)
rbt = "1";
if($("#rbt3").attr("checked") == true)
rbt = "2";
if($("#hidprovince").val() != "不限")
hpro = $("#hidprovince").val(); //省id
if($("#hidcity").val() != "不限")
hct = $("#hidcity").val(); //市id
if($("#hidjobt2").val() != "不限")
hjt = $("#hidjobt2").val(); //职位id
if($("#hidprop").val() != "不限")
hpr = $("#hidprop").val(); //行业id
if($("#ddlCONature").val() != "不限")
dcn = escape($("#ddlCONature").val()); //公司性质
if($("#ddlIncomeRange").val() != "不限")
dir = escape($("#ddlIncomeRange").val()); //薪酬范围
if($("#ddlCoScale").val() != "不限")
dcs = escape($("#ddlCoScale").val()); //公司规模
if($("#slvldday").val() != "")
dvd = $("#slvldday").val(); //发布时间
if($("#ddlWorkMode").val() != "不限")
dwm = escape($("#ddlWorkMode").val()); //职位性质
if($("#ddlEduID").val() != "不限")
dei = escape($("#ddlEduID").val()); //学历
if($("#ddlWorkRange").val() != "不限")
dwr = escape($("#ddlWorkRange").val()); //工作经验
urlstr = "search_index.aspx?show=result&tkey="+ tkey + "&rbt=" +rbt + "&hpro="+ hpro + "&hct=" + hct + "&hjt=" + hjt + "&hpr=" + hpr + "&dir=" + dir + "&dcn=" + dcn + "&dcs=" + dcs + "&dvd=" + dvd + "&dwm=" + dwm + "&dei=" + dei + "&dwr=" + dwr;
window.location.href =(urlstr);
}
</script>
aspx.cs页代码
后台代码
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (Request.QueryString["show"] != null)
{
string show = Request.QueryString["show"].ToString();
if (show == "ct") //地区
{ BindArea(); }
else if (show == "jt") //职位
{ BindJobT(); }
else if (show == "pr") //行业
{ BindProp(); }
else if (show == "result") //搜索结果
{
string tkey = Server.UrlDecode(Request.QueryString["tkey"]);
string searchType = Request.QueryString["rbt"];
string provinceId = Request.QueryString["hpro"];
string cityId = Request.QueryString["hct"];
string jobtypeId = Request.QueryString["hjt"];
string proId = Request.QueryString["hpr"];
string coNature = Server.UrlDecode(Request.QueryString["dcn"]);
string incomeRange = Server.UrlDecode(Request.QueryString["dir"]);
string coScale = Server.UrlDecode(Request.QueryString["dcs"]);
string vldDay = Request.QueryString["dvd"];
string workMode = Server.UrlDecode(Request.QueryString["dwm"]);
string eduId = Server.UrlDecode(Request.QueryString["dei"]);
string workRange = Server.UrlDecode(Request.QueryString["dwr"]);
if (searchType != "")
{
strWhere += " and (JobName like \'%" + tkey + "%\' or JobDescription like \'%" + tkey + "%\') ";
if (searchType == "1")
{
strWhere += " and JobName like \'%" + tkey + "%\'";
}
else
{
strWhere += " and CoName like \'%" + tkey + "%\'";
}
}
if (provinceId != "")
{
if (cityId == "0")
{
strWhere += " and ProvinceID=" + provinceId + "and cityid <> 0";
}
else
{
strWhere += " and ProvinceID=" + provinceId + " and cityid=" + cityId;
}
}
if (jobtypeId != "")
{
strWhere += " and JobTypeID=" + jobtypeId;
}
if (proId != "")
{
strWhere += " and ProTypeID=" + proId;
}
if (coNature != "")
{
strWhere += " and CoNatureID='" + coNature + "'";
}
if (incomeRange != "")
{
strWhere += " and IncomeRange='" + incomeRange + "'";
}
if (workRange != "")
{
strWhere += " and WorkRange='" + workRange + "'";
}
if (eduId != "")
{
strWhere += " and EduID='" + eduId + "'";
}
if (coScale != "")
{
strWhere += " and CoScale='" + coScale + "'";
}
if (workMode != "")
{
strWhere += " and WorkMode='" + workMode + "'";
}
if (vldDay != "")
{
strWhere += " and postdate > dateadd(day,-" + vldDay + ",getDate()) and postdate < getDate()";
}
BindData();
}
}
}
}
protected void anp1_PageChanged(object sender, EventArgs e)
{
int pageCount, RecordCount;
rpt1.DataSource = bllJob.GetPage(anp1.CurrentPageIndex, PageSize, "", strWhere, out pageCount, out RecordCount);
rpt1.DataBind();
}
{
if (!IsPostBack)
{
if (Request.QueryString["show"] != null)
{
string show = Request.QueryString["show"].ToString();
if (show == "ct") //地区
{ BindArea(); }
else if (show == "jt") //职位
{ BindJobT(); }
else if (show == "pr") //行业
{ BindProp(); }
else if (show == "result") //搜索结果
{
string tkey = Server.UrlDecode(Request.QueryString["tkey"]);
string searchType = Request.QueryString["rbt"];
string provinceId = Request.QueryString["hpro"];
string cityId = Request.QueryString["hct"];
string jobtypeId = Request.QueryString["hjt"];
string proId = Request.QueryString["hpr"];
string coNature = Server.UrlDecode(Request.QueryString["dcn"]);
string incomeRange = Server.UrlDecode(Request.QueryString["dir"]);
string coScale = Server.UrlDecode(Request.QueryString["dcs"]);
string vldDay = Request.QueryString["dvd"];
string workMode = Server.UrlDecode(Request.QueryString["dwm"]);
string eduId = Server.UrlDecode(Request.QueryString["dei"]);
string workRange = Server.UrlDecode(Request.QueryString["dwr"]);
if (searchType != "")
{
strWhere += " and (JobName like \'%" + tkey + "%\' or JobDescription like \'%" + tkey + "%\') ";
if (searchType == "1")
{
strWhere += " and JobName like \'%" + tkey + "%\'";
}
else
{
strWhere += " and CoName like \'%" + tkey + "%\'";
}
}
if (provinceId != "")
{
if (cityId == "0")
{
strWhere += " and ProvinceID=" + provinceId + "and cityid <> 0";
}
else
{
strWhere += " and ProvinceID=" + provinceId + " and cityid=" + cityId;
}
}
if (jobtypeId != "")
{
strWhere += " and JobTypeID=" + jobtypeId;
}
if (proId != "")
{
strWhere += " and ProTypeID=" + proId;
}
if (coNature != "")
{
strWhere += " and CoNatureID='" + coNature + "'";
}
if (incomeRange != "")
{
strWhere += " and IncomeRange='" + incomeRange + "'";
}
if (workRange != "")
{
strWhere += " and WorkRange='" + workRange + "'";
}
if (eduId != "")
{
strWhere += " and EduID='" + eduId + "'";
}
if (coScale != "")
{
strWhere += " and CoScale='" + coScale + "'";
}
if (workMode != "")
{
strWhere += " and WorkMode='" + workMode + "'";
}
if (vldDay != "")
{
strWhere += " and postdate > dateadd(day,-" + vldDay + ",getDate()) and postdate < getDate()";
}
BindData();
}
}
}
}
protected void anp1_PageChanged(object sender, EventArgs e)
{
int pageCount, RecordCount;
rpt1.DataSource = bllJob.GetPage(anp1.CurrentPageIndex, PageSize, "", strWhere, out pageCount, out RecordCount);
rpt1.DataBind();
}
数据访问层,服务器上的是sql2000,存储过程,所以没用05的方法
DAL
public IList<heyjob.Model.b_Job> GetPage(int pageindex, int _pageSize, string strField, string strWhere, out int pageCount, out int RecordCount)
{
pageCount = 0;
RecordCount = 0;
IList<heyjob.Model.b_Job> list = new List<heyjob.Model.b_Job>();
using (SqlConnection conn = new SqlConnection(PubConstant.ConnectionString))
{
SqlCommand objcmd = new SqlCommand(".ThePSPIsAllPurposeNotIn", conn);
objcmd.CommandType = CommandType.StoredProcedure;
SqlParameter[] para ={
new SqlParameter("@tblName",SqlDbType.VarChar,-1),
new SqlParameter("@fldName",SqlDbType.VarChar,-1),
new SqlParameter("@pageSize",SqlDbType.Int),
new SqlParameter("@page",SqlDbType.Int),
new SqlParameter("@fldSort",SqlDbType.VarChar,-1),
new SqlParameter("@Sort",SqlDbType.Bit),
new SqlParameter("@strCondition",SqlDbType.VarChar),
new SqlParameter("@ID",SqlDbType.VarChar,-1),
new SqlParameter("@pageCount",SqlDbType.Int),
new SqlParameter("@Counts",SqlDbType.Int),
new SqlParameter("@Dist",SqlDbType.VarChar,-1)
};
para[0].Value = "view_search";
para[1].Value = "*";
para[2].Value = _pageSize;
para[3].Value = pageindex;
para[4].Value = "PostDate";
para[5].Value = 1;
para[6].Value = strWhere;
para[7].Value = "JobID";
para[8].Value = pageCount;
para[8].Direction = ParameterDirection.Output;
para[9].Value = RecordCount;
para[9].Direction = ParameterDirection.Output;
para[10].Value = 0;
objcmd.Parameters.AddRange(para);
conn.Open();
using (SqlDataReader reader = objcmd.ExecuteReader(CommandBehavior.CloseConnection))
{
while (reader.Read())
{
heyjob.Model.b_Job model = new heyjob.Model.b_Job();
model.JobID = Convert.ToInt32(reader["JobID"]);
model.JobName = Convert.ToString(reader["JobName"]);
model.ProvinceID = Convert.ToInt32(reader["ProvinceID"]);
model.CityID = Convert.ToInt32(reader["CityID"]);
model.ProTypeID = Convert.ToInt32(reader["ProTypeID"]);
model.JobTypeID = Convert.ToInt32(reader["JobTypeID"]);
model.State = Convert.ToInt32(reader["State"]);
model.VldDay = Convert.ToInt32(reader["VldDay"]);
model.JobDescription = Convert.ToString(reader["JobDescription"]);
model.WorkMode = Convert.ToString(reader["WorkMode"]);
model.IncomeRange = Convert.ToString(reader["IncomeRange"]);
model.EduID = Convert.ToString(reader["EduID"]);
model.PostDate = Convert.ToDateTime(reader["PostDate"]);
{
pageCount = 0;
RecordCount = 0;
IList<heyjob.Model.b_Job> list = new List<heyjob.Model.b_Job>();
using (SqlConnection conn = new SqlConnection(PubConstant.ConnectionString))
{
SqlCommand objcmd = new SqlCommand(".ThePSPIsAllPurposeNotIn", conn);
objcmd.CommandType = CommandType.StoredProcedure;
SqlParameter[] para ={
new SqlParameter("@tblName",SqlDbType.VarChar,-1),
new SqlParameter("@fldName",SqlDbType.VarChar,-1),
new SqlParameter("@pageSize",SqlDbType.Int),
new SqlParameter("@page",SqlDbType.Int),
new SqlParameter("@fldSort",SqlDbType.VarChar,-1),
new SqlParameter("@Sort",SqlDbType.Bit),
new SqlParameter("@strCondition",SqlDbType.VarChar),
new SqlParameter("@ID",SqlDbType.VarChar,-1),
new SqlParameter("@pageCount",SqlDbType.Int),
new SqlParameter("@Counts",SqlDbType.Int),
new SqlParameter("@Dist",SqlDbType.VarChar,-1)
};
para[0].Value = "view_search";
para[1].Value = "*";
para[2].Value = _pageSize;
para[3].Value = pageindex;
para[4].Value = "PostDate";
para[5].Value = 1;
para[6].Value = strWhere;
para[7].Value = "JobID";
para[8].Value = pageCount;
para[8].Direction = ParameterDirection.Output;
para[9].Value = RecordCount;
para[9].Direction = ParameterDirection.Output;
para[10].Value = 0;
objcmd.Parameters.AddRange(para);
conn.Open();
using (SqlDataReader reader = objcmd.ExecuteReader(CommandBehavior.CloseConnection))
{
while (reader.Read())
{
heyjob.Model.b_Job model = new heyjob.Model.b_Job();
model.JobID = Convert.ToInt32(reader["JobID"]);
model.JobName = Convert.ToString(reader["JobName"]);
model.ProvinceID = Convert.ToInt32(reader["ProvinceID"]);
model.CityID = Convert.ToInt32(reader["CityID"]);
model.ProTypeID = Convert.ToInt32(reader["ProTypeID"]);
model.JobTypeID = Convert.ToInt32(reader["JobTypeID"]);
model.State = Convert.ToInt32(reader["State"]);
model.VldDay = Convert.ToInt32(reader["VldDay"]);
model.JobDescription = Convert.ToString(reader["JobDescription"]);
model.WorkMode = Convert.ToString(reader["WorkMode"]);
model.IncomeRange = Convert.ToString(reader["IncomeRange"]);
model.EduID = Convert.ToString(reader["EduID"]);
model.PostDate = Convert.ToDateTime(reader["PostDate"]);
//model里临时加的公司表的xxx
model.CoSetID = Convert.ToInt32(reader["CoSetID"]);
model.CoName = Convert.ToString(reader["CoName"]);
model.CoScale = Convert.ToString(reader["CoScale"]);
model.CoNatureID = Convert.ToString(reader["CoNatureID"]);
list.Add(model);
}
}
RecordCount = Convert.ToInt32(objcmd.Parameters["@Counts"].Value);
pageCount = Convert.ToInt32(objcmd.Parameters["@pageCount"].Value);
conn.Close();
conn.Dispose();
}
return list;
}
model.CoSetID = Convert.ToInt32(reader["CoSetID"]);
model.CoName = Convert.ToString(reader["CoName"]);
model.CoScale = Convert.ToString(reader["CoScale"]);
model.CoNatureID = Convert.ToString(reader["CoNatureID"]);
list.Add(model);
}
}
RecordCount = Convert.ToInt32(objcmd.Parameters["@Counts"].Value);
pageCount = Convert.ToInt32(objcmd.Parameters["@pageCount"].Value);
conn.Close();
conn.Dispose();
}
return list;
}
存储过程不贴了,sql关掉了,机器烂。。开起卡的很。。睡觉了,好累!睡醒起来做url重写以及职位详情和公司详情的模板。。。人生啊,就是这么累,累并快乐着!