704 lines
79 KiB
C#
704 lines
79 KiB
C#
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Configuration;
|
|||
|
using System.Web;
|
|||
|
using System.Web.UI;
|
|||
|
using System.Web.UI.WebControls;
|
|||
|
using System.Text;
|
|||
|
using System.Data;
|
|||
|
using System.Reflection;
|
|||
|
using Newtonsoft.Json;
|
|||
|
using Newtonsoft.Json.Linq;
|
|||
|
using System.IO;
|
|||
|
using System.Threading;
|
|||
|
using FineUIPro;
|
|||
|
using AspNet = System.Web.UI.WebControls;
|
|||
|
|
|||
|
|
|||
|
namespace FineUIPro.Web
|
|||
|
{
|
|||
|
public class PageBase : System.Web.UI.Page
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// 当前登录人信息。
|
|||
|
/// </summary>
|
|||
|
public Model.Sys_User CurrUser
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (Session["CurrUser"] == null) return null;
|
|||
|
return (Model.Sys_User)Session["CurrUser"];
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
#region OnInit
|
|||
|
|
|||
|
protected override void OnInit(EventArgs e)
|
|||
|
{
|
|||
|
var pm = PageManager.Instance;
|
|||
|
if (pm != null)
|
|||
|
{
|
|||
|
HttpCookie themeCookie = Request.Cookies["Theme_Pro"];
|
|||
|
if (themeCookie != null)
|
|||
|
{
|
|||
|
string themeValue = themeCookie.Value;
|
|||
|
|
|||
|
// 是否为内置主题
|
|||
|
if (IsSystemTheme(themeValue))
|
|||
|
{
|
|||
|
pm.CustomTheme = String.Empty;
|
|||
|
pm.Theme = (Theme)Enum.Parse(typeof(Theme), themeValue, true);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
pm.CustomTheme = themeValue;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
HttpCookie langCookie = Request.Cookies["Language_Pro"];
|
|||
|
if (langCookie != null)
|
|||
|
{
|
|||
|
string langValue = langCookie.Value;
|
|||
|
try
|
|||
|
{
|
|||
|
// 是否为内置语言
|
|||
|
pm.Language = (Language)Enum.Parse(typeof(Language), langValue, true);
|
|||
|
}
|
|||
|
catch (Exception)
|
|||
|
{
|
|||
|
pm.CustomLanguage = langValue;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
HttpCookie modeCookie = Request.Cookies["MenuMode_Pro"];
|
|||
|
if (modeCookie != null)
|
|||
|
{
|
|||
|
string modeType = modeCookie.Value;
|
|||
|
if (modeType == "compact")
|
|||
|
{
|
|||
|
pm.EnableCompactMode = true;
|
|||
|
}
|
|||
|
else if (modeType == "large")
|
|||
|
{
|
|||
|
pm.EnableLargeMode = true;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
HttpCookie loadingCookie = Request.Cookies["Loading_Pro"];
|
|||
|
if (loadingCookie != null)
|
|||
|
{
|
|||
|
int loadingNumber = Convert.ToInt32(loadingCookie.Value);
|
|||
|
pm.LoadingImageNumber = loadingNumber;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
// 为所有页面添加公共的:<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|||
|
System.Web.UI.HtmlControls.HtmlGenericControl metaCtrl = new System.Web.UI.HtmlControls.HtmlGenericControl("meta");
|
|||
|
metaCtrl.Attributes["http-equiv"] = "Content-Type";
|
|||
|
metaCtrl.Attributes["content"] = "text/html; charset=utf-8";
|
|||
|
Header.Controls.AddAt(0, metaCtrl);
|
|||
|
|
|||
|
|
|||
|
// 为所有页面添加公共的:<link rel="stylesheet" type="text/css" href="res/css/common.css"></link>
|
|||
|
System.Web.UI.HtmlControls.HtmlGenericControl linkCtrl = new System.Web.UI.HtmlControls.HtmlGenericControl("link");
|
|||
|
linkCtrl.Attributes["rel"] = "stylesheet";
|
|||
|
linkCtrl.Attributes["type"] = "text/css";
|
|||
|
linkCtrl.Attributes["href"] = ResolveClientUrl("~/res/css/common.css");
|
|||
|
Header.Controls.Add(linkCtrl);
|
|||
|
|
|||
|
this.Load += new EventHandler(this.PageBase_Load);
|
|||
|
this.Unload += new EventHandler(this.PageBase_UNLoad);
|
|||
|
|
|||
|
base.OnInit(e);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
private bool IsSystemTheme(string themeName)
|
|||
|
{
|
|||
|
themeName = themeName.ToLower();
|
|||
|
string[] themes = Enum.GetNames(typeof(Theme));
|
|||
|
foreach (string theme in themes)
|
|||
|
{
|
|||
|
if (theme.ToLower() == themeName)
|
|||
|
{
|
|||
|
return true;
|
|||
|
}
|
|||
|
}
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 页面登录成功
|
|||
|
/// </summary>
|
|||
|
/// <param name="sender"></param>
|
|||
|
/// <param name="e"></param>
|
|||
|
protected void PageBase_Load(object sender, EventArgs e)
|
|||
|
{
|
|||
|
//这是后置式的权限管理策略.
|
|||
|
//页面装载完成以后才检查是否有权限打开此页....
|
|||
|
//anyway,its ok.
|
|||
|
|
|||
|
this.Title = BLL.Funs.SystemName;
|
|||
|
if (CurrUser == null)
|
|||
|
{
|
|||
|
if (this.Page.Request.AppRelativeCurrentExecutionFilePath != "~/Login.aspx")
|
|||
|
Response.Redirect("~/Login.aspx");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// UNLOAD事件,发生在页面装载顺序的最后。
|
|||
|
/// 在这里处理的是DBLIST,数据库连接字典。
|
|||
|
/// </summary>
|
|||
|
/// <param name="sender">S</param>
|
|||
|
/// <param name="e">E</param>
|
|||
|
protected void PageBase_UNLoad(object sender, EventArgs e)
|
|||
|
{
|
|||
|
if (BLL.Funs.DBList.ContainsKey(System.Threading.Thread.CurrentThread.ManagedThreadId))
|
|||
|
{
|
|||
|
BLL.Funs.DBList.Remove(System.Threading.Thread.CurrentThread.ManagedThreadId);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 语言国际化
|
|||
|
/// </summary>
|
|||
|
protected override void InitializeCulture()
|
|||
|
{
|
|||
|
string https = ConfigurationManager.AppSettings["Https"];
|
|||
|
if (Request.Cookies["SelectLan"] != null)
|
|||
|
{
|
|||
|
HttpCookie lanCookie = Request.Cookies["SelectLan"];
|
|||
|
|
|||
|
//从Session或Cookie里面读取
|
|||
|
string language = lanCookie["lan"];
|
|||
|
|
|||
|
//当前线程的语言采用哪种语言(比如zh,en等)
|
|||
|
Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(language);
|
|||
|
//决定各种数据类型是如何组织,如数字与日期
|
|||
|
Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture(language);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
HttpCookie lanCookie = new HttpCookie("SelectLan");
|
|||
|
//默认为中文
|
|||
|
lanCookie["lan"] = "zh-CN";
|
|||
|
lanCookie.Expires = DateTime.Now.AddDays(1);
|
|||
|
if (https == "true")
|
|||
|
{
|
|||
|
lanCookie.Secure = true;
|
|||
|
}
|
|||
|
Response.Cookies.Add(lanCookie);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 获取语言
|
|||
|
/// </summary>
|
|||
|
public string GetLanguage
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
string lan = "zh-CN";
|
|||
|
if (Request.Cookies["SelectLan"] != null)
|
|||
|
{
|
|||
|
HttpCookie lanCookie = Request.Cookies["SelectLan"];
|
|||
|
if (lanCookie["lan"] != null)
|
|||
|
{
|
|||
|
if (lanCookie["lan"] == "en-US")
|
|||
|
{
|
|||
|
lan = "en-US";
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
return lan;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 最外层FRAME跳转到新地址
|
|||
|
/// </summary>
|
|||
|
/// <param name="urlstr">URL</param>
|
|||
|
public static void ZXRefresh(string urlstr)
|
|||
|
{
|
|||
|
System.Web.HttpContext.Current.Response.Write("<script>top.location.href='" + "/" + urlstr.TrimStart('/') + "';</script>");
|
|||
|
System.Web.HttpContext.Current.Response.End();
|
|||
|
}
|
|||
|
|
|||
|
#region 将IEnumerable<T>类型的集合转换为DataTable类型
|
|||
|
/// <summary>
|
|||
|
/// 将IEnumerable<T>类型的集合转换为DataTable类型
|
|||
|
/// </summary>
|
|||
|
/// <typeparam name="T"></typeparam>
|
|||
|
/// <param name="varlist"></param>
|
|||
|
/// <returns></returns>
|
|||
|
protected DataTable LINQToDataTable<T>(IEnumerable<T> varlist)
|
|||
|
{ //定义要返回的DataTable对象
|
|||
|
DataTable dtReturn = new DataTable();
|
|||
|
// 保存列集合的属性信息数组
|
|||
|
PropertyInfo[] oProps = null;
|
|||
|
if (varlist == null) return dtReturn;//安全性检查
|
|||
|
//循环遍历集合,使用反射获取类型的属性信息
|
|||
|
foreach (T rec in varlist)
|
|||
|
{
|
|||
|
//使用反射获取T类型的属性信息,返回一个PropertyInfo类型的集合
|
|||
|
if (oProps == null)
|
|||
|
{
|
|||
|
oProps = ((Type)rec.GetType()).GetProperties();
|
|||
|
//循环PropertyInfo数组
|
|||
|
foreach (PropertyInfo pi in oProps)
|
|||
|
{
|
|||
|
Type colType = pi.PropertyType;//得到属性的类型
|
|||
|
//如果属性为泛型类型
|
|||
|
if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition()
|
|||
|
== typeof(Nullable<>)))
|
|||
|
{ //获取泛型类型的参数
|
|||
|
colType = colType.GetGenericArguments()[0];
|
|||
|
}
|
|||
|
//将类型的属性名称与属性类型作为DataTable的列数据
|
|||
|
dtReturn.Columns.Add(new DataColumn(pi.Name, colType));
|
|||
|
}
|
|||
|
}
|
|||
|
//新建一个用于添加到DataTable中的DataRow对象
|
|||
|
DataRow dr = dtReturn.NewRow();
|
|||
|
//循环遍历属性集合
|
|||
|
foreach (PropertyInfo pi in oProps)
|
|||
|
{ //为DataRow中的指定列赋值
|
|||
|
dr[pi.Name] = pi.GetValue(rec, null) == null ?
|
|||
|
DBNull.Value : pi.GetValue(rec, null);
|
|||
|
}
|
|||
|
//将具有结果值的DataRow添加到DataTable集合中
|
|||
|
dtReturn.Rows.Add(dr);
|
|||
|
}
|
|||
|
return dtReturn;//返回DataTable对象
|
|||
|
}
|
|||
|
#endregion
|
|||
|
|
|||
|
#region 模拟数据库分页及排序,两种方式,一种传入数据表,另一种传入泛型
|
|||
|
/// <summary>
|
|||
|
/// 模拟数据库分页
|
|||
|
/// </summary>
|
|||
|
/// <typeparam name="T">IEnumerable类型</typeparam>
|
|||
|
/// <param name="Grid1">Grid表格</param>
|
|||
|
/// <param name="varlist">IEnumerable类型的集合</param>
|
|||
|
/// <returns>数据表</returns>
|
|||
|
protected DataTable GetPagedDataTable<T>(FineUIPro.Grid Grid1, IEnumerable<T> varlist)
|
|||
|
{
|
|||
|
int pageIndex = Grid1.PageIndex;
|
|||
|
int pageSize = Grid1.PageSize;
|
|||
|
|
|||
|
string sortField = Grid1.SortField;
|
|||
|
string sortDirection = Grid1.SortDirection;
|
|||
|
|
|||
|
DataTable tb = this.LINQToDataTable(varlist);
|
|||
|
|
|||
|
DataView view = tb.DefaultView;
|
|||
|
if (view.Count > 0)
|
|||
|
{
|
|||
|
view.Sort = String.Format("{0} {1}", sortField, sortDirection);
|
|||
|
}
|
|||
|
DataTable table = view.ToTable();
|
|||
|
DataTable paged = table.Clone();
|
|||
|
|
|||
|
int rowbegin = pageIndex * pageSize;
|
|||
|
int rowend = (pageIndex + 1) * pageSize;
|
|||
|
if (rowend > table.Rows.Count)
|
|||
|
{
|
|||
|
rowend = table.Rows.Count;
|
|||
|
}
|
|||
|
|
|||
|
for (int i = rowbegin; i < rowend; i++)
|
|||
|
{
|
|||
|
paged.ImportRow(table.Rows[i]);
|
|||
|
}
|
|||
|
|
|||
|
return paged;
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 模拟数据库分页
|
|||
|
/// </summary>
|
|||
|
/// <param name="Grid1">Grid表格</param>
|
|||
|
/// <param name="tb">数据表</param>
|
|||
|
/// <returns>数据表</returns>
|
|||
|
protected DataTable GetPagedDataTable(FineUIPro.Grid Grid1, DataTable tb)
|
|||
|
{
|
|||
|
int pageIndex = Grid1.PageIndex;
|
|||
|
int pageSize = Grid1.PageSize;
|
|||
|
|
|||
|
string sortField = Grid1.SortField;
|
|||
|
string sortDirection = Grid1.SortDirection;
|
|||
|
|
|||
|
//DataTable table2 = DataSourceUtil.GetDataTable2();
|
|||
|
DataView view = tb.DefaultView;
|
|||
|
// view.Sort = String.Format("{0} {1}", sortField, sortDirection);
|
|||
|
if (!string.IsNullOrEmpty(sortField) && view.Count > 0)
|
|||
|
{
|
|||
|
view.Sort = String.Format("{0} {1}", sortField, sortDirection);
|
|||
|
}
|
|||
|
|
|||
|
DataTable table = view.ToTable();
|
|||
|
DataTable paged = table.Clone();
|
|||
|
|
|||
|
int rowbegin = pageIndex * pageSize;
|
|||
|
int rowend = (pageIndex + 1) * pageSize;
|
|||
|
if (rowend > table.Rows.Count)
|
|||
|
{
|
|||
|
rowend = table.Rows.Count;
|
|||
|
}
|
|||
|
|
|||
|
for (int i = rowbegin; i < rowend; i++)
|
|||
|
{
|
|||
|
paged.ImportRow(table.Rows[i]);
|
|||
|
}
|
|||
|
|
|||
|
return paged;
|
|||
|
}
|
|||
|
#endregion
|
|||
|
|
|||
|
#region 表格过滤
|
|||
|
// 表格过滤
|
|||
|
protected DataTable GetFilteredTable(JArray filteredData, DataTable source)
|
|||
|
{
|
|||
|
DataTable result = source.Clone();
|
|||
|
foreach (DataRow row in source.Rows)
|
|||
|
{
|
|||
|
bool filtered = true;
|
|||
|
foreach (JObject filteredObj in filteredData)
|
|||
|
{
|
|||
|
if (row != null && !CheckDataRow(row, filteredObj))
|
|||
|
{
|
|||
|
filtered = false;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (filtered)
|
|||
|
{
|
|||
|
result.Rows.Add(row.ItemArray);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return result;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
private bool CheckDataRow(DataRow row, JObject filteredObj)
|
|||
|
{
|
|||
|
// 在 ASPX 中设置列的 ColumnID 属性,约定 ColumnID 和数据库的字段名称一样
|
|||
|
string columnID = filteredObj.Value<string>("column");
|
|||
|
object rowitemData = row[columnID];
|
|||
|
|
|||
|
bool multi = filteredObj.Value<bool>("multi");
|
|||
|
if (multi)
|
|||
|
{
|
|||
|
string matcher = filteredObj.Value<string>("matcher");
|
|||
|
JArray items = filteredObj.Value<JArray>("items");
|
|||
|
|
|||
|
bool valid = false;
|
|||
|
if (matcher == "all")
|
|||
|
{
|
|||
|
valid = true;
|
|||
|
}
|
|||
|
foreach (JObject item in items)
|
|||
|
{
|
|||
|
string itemOperator = item.Value<string>("operator");
|
|||
|
object itemValue = item.Value<object>("value");
|
|||
|
|
|||
|
if (FilterDataRowItem(rowitemData, itemOperator, itemValue, columnID))
|
|||
|
{
|
|||
|
if (matcher == "any")
|
|||
|
{
|
|||
|
valid = true;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if (matcher == "all")
|
|||
|
{
|
|||
|
valid = false;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return valid;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
JObject item = filteredObj.Value<JObject>("item");
|
|||
|
string itemOperator = item.Value<string>("operator");
|
|||
|
object itemValue = item.Value<object>("value");
|
|||
|
|
|||
|
return FilterDataRowItem(rowitemData, itemOperator, itemValue, columnID);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public delegate bool FilterDataRowItemDelegate(object sourceObj, string fillteredOperator, object fillteredObj, string column);
|
|||
|
public FilterDataRowItemDelegate FilterDataRowItem
|
|||
|
{
|
|||
|
get;
|
|||
|
set;
|
|||
|
}
|
|||
|
#endregion
|
|||
|
|
|||
|
#region 上传文件类型判断
|
|||
|
|
|||
|
protected readonly static List<string> VALID_FILE_TYPES = new List<string> { "jpg", "bmp", "gif", "jpeg", "png" };
|
|||
|
|
|||
|
protected static bool ValidateFileType(string fileName)
|
|||
|
{
|
|||
|
string fileType = String.Empty;
|
|||
|
int lastDotIndex = fileName.LastIndexOf(".");
|
|||
|
if (lastDotIndex >= 0)
|
|||
|
{
|
|||
|
fileType = fileName.Substring(lastDotIndex + 1).ToLower();
|
|||
|
}
|
|||
|
|
|||
|
if (VALID_FILE_TYPES.Contains(fileType))
|
|||
|
{
|
|||
|
return true;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
return false;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
#region 上传文件类型判断
|
|||
|
/// <summary>
|
|||
|
/// 可执行文件类型
|
|||
|
/// </summary>
|
|||
|
protected readonly static List<string> VALID_FILE_ExecutableTYPES = new List<string> { "exe", "com", "bat" };
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 是否包含可执行文件类型
|
|||
|
/// </summary>
|
|||
|
/// <param name="fileName"></param>
|
|||
|
/// <returns></returns>
|
|||
|
protected static bool ValidateFileTypes(string fileName)
|
|||
|
{
|
|||
|
string fileType = String.Empty;
|
|||
|
int lastDotIndex = fileName.LastIndexOf(".");
|
|||
|
if (lastDotIndex >= 0)
|
|||
|
{
|
|||
|
fileType = fileName.Substring(lastDotIndex + 1).ToLower();
|
|||
|
}
|
|||
|
|
|||
|
if (VALID_FILE_ExecutableTYPES.Contains(fileType))
|
|||
|
{
|
|||
|
return true;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
return false;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
#region 省市县
|
|||
|
|
|||
|
protected readonly static JArray SHENG_JSON = JArray.Parse("[\"北京\",\"天津\",\"上海\",\"重庆\",\"河北\",\"山西\",\"辽宁\",\"吉林\",\"黑龙江\",\"江苏\",\"浙江\",\"安徽\",\"福建\",\"江西\",\"山东\",\"河南\",\"湖北\",\"湖南\",\"广东\",\"海南\",\"四川\",\"贵州\",\"云南\",\"陕西\",\"甘肃\",\"青海\",\"内蒙古\",\"广西\",\"西藏\",\"宁夏\",\"新疆\",\"香港\",\"澳门\",\"台湾\"]");
|
|||
|
protected readonly static JObject SHI_JSON = JObject.Parse("{\"北京\":[\"北京市\"],\"天津\":[\"天津市\"],\"上海\":[\"上海市\"],\"重庆\":[\"重庆市\"],\"河北\":[\"石家庄市\",\"唐山市\",\"秦皇岛市\",\"邯郸市\",\"邢台市\",\"保定市\",\"张家口市\",\"承德市\",\"沧州市\",\"廊坊市\",\"衡水市\"],\"山西\":[\"太原市\",\"大同市\",\"阳泉市\",\"长治市\",\"晋城市\",\"朔州市\",\"晋中市运城市忻州市\",\"临汾市\",\"吕梁市\"],\"辽宁\":[\"沈阳市\",\"大连市\",\"鞍山市\",\"抚顺市\",\"本溪市\",\"丹东市\",\"锦州市\",\"营口市\",\"阜新市\",\"辽阳市\",\"盘锦市\",\"铁岭市\",\"朝阳市\",\"葫芦岛市\"],\"吉林\":[\"长春市\",\"吉林市\",\"四平市\",\"辽源市\",\"通化市\",\"白山市\",\"松原市\",\"白城市\",\"延边朝鲜族自治州\"],\"黑龙江\":[\"哈尔滨市\",\"齐齐哈尔市\",\"鹤岗市\",\"双鸭山市\",\"鸡西市\",\"大庆市\",\"伊春市\",\"牡丹江市\",\"佳木斯市\",\"七台河市\",\"黑河市\",\"绥化市\",\"大兴安岭地区\"],\"江苏\":[\"南京市\",\"苏州市\",\"无锡市\",\"常州市\",\"镇江市\",\"南通市\",\"泰州市\",\"扬州市\",\"盐城市\",\"连云港市\",\"徐州市\",\"淮安市\",\"宿迁市\"],\"浙江\":[\"杭州市\",\"宁波市\",\"温州市\",\"嘉兴市\",\"湖州市\",\"绍兴市\",\"金华市\",\"衢州市\",\"舟山市\",\"台州市\",\"丽水市\"],\"安徽\":[\"合肥市\",\"芜湖市\",\"蚌埠市\",\"淮南市\",\"马鞍山市\",\"淮北市\",\"铜陵市\",\"安庆市\",\"黄山市\",\"滁州市\",\"阜阳市\",\"宿州市\",\"巢湖市\",\"六安市\",\"亳州市\",\"池州市\",\"宣城市\"],\"福建\":[\"福州市\",\"厦门市\",\"莆田市\",\"三明市\",\"泉州市\",\"漳州市\",\"南平市\",\"龙岩市\",\"宁德市\"],\"江西\":[\"南昌市\",\"景德镇市\",\"萍乡市\",\"九江市\",\"新余市\",\"鹰潭市\",\"赣州市\",\"吉安市\",\"宜春市\",\"抚州市\",\"上饶市\"],\"山东\":[\"济南市\",\"青岛市\",\"淄博市\",\"枣庄市\",\"东营市\",\"烟台市\",\"潍坊市\",\"济宁市\",\"泰安市\",\"威海市\",\"日照市\",\"莱芜市\",\"临沂市\",\"德州市\",\"聊城市\",\"滨州市\",\"菏泽市\"],\"河南\":[\"郑州市\",\"开封市\",\"洛阳市\",\"平顶山市\",\"安阳市\",\"鹤壁市\",\"新乡市\",\"焦作市\",\"濮阳市\",\"许昌市\",\"漯河市\",\"三门峡市\",\"南阳市\",\"商丘市\",\"信阳市\",\"周口市\",\"驻马店市\",\"济源市\"],\"湖北\":[\"武汉市\",\"黄石市\",\"十堰市\",\"荆州市\",\"宜昌市\",\"襄樊市\",\"鄂州市\",\"荆门市\",\"孝感市\",\"黄冈市\",\"咸宁市\",\"随州市\",\"恩施土家族苗族自治州\",\"仙桃市\",\"天门市\",\"潜江市\",\"神农架林区\"],\"湖南\":[\"长沙市\",\"株洲市\",\"湘潭市\",\"衡阳市\",\"邵阳市\",\"岳阳市\",\"常德市\",\"张家界市\",\"益阳市\",\"郴州市\",\"永州市\",\"怀化市\",\"娄底市\",\"湘西土家族苗族自治州\"],\"广东\":[\"广州市\",\"深圳市\",\"珠海市\",\"汕头市\",\"韶关市\",\"佛山市\",\"江门市\",\"湛江市\",\"茂名市\",\"肇庆市\",\"惠州市\",\"梅州市\",\"汕尾市\",\"河源市\",\"阳江市\",\"清远市\",\"东莞市\",\"中山市\",\"潮州市\",\"揭阳市\",\"云浮市\"],\"海南\":[\"海口市\",\"三亚市\",\"五指山市\",\"琼海市\",\"儋州市\",\"文昌市\",\"万宁市\",\"东方市\",\"澄迈县\",\"定安县\",\"屯昌县\",\"临高县\",\"白沙黎族自治县\",\"昌江黎族自治县\",\"乐东黎族自治县\",\"陵水黎族自治县\",\"保亭黎族苗族自治县\",\"琼中黎族苗族自治县\"],\"四川\":[\"成都市\",\"自贡市\",\"攀枝花市\",\"泸州市\",\"德阳市\",\"绵阳市\",\"广元市\",\"遂宁市\",\"内江市\",\"乐山市\",\"南充市\",\"眉山市\",\"宜宾市\",\"广安市\",\"达州市\",\"雅安市\",\"巴中市\",\"资阳市\",\"阿坝藏族羌族自治州\",\"甘孜藏族自治州\",\"凉山彝族自治州\"],\"贵州\":[\"<22><>
|
|||
|
protected readonly static JObject XIAN_JSON = JObject.Parse("{\"北京市\":[\"东城区\",\"西城区\",\"崇文区\",\"宣武区\",\"朝阳区\",\"丰台区\",\"石景山区\",\"海淀区\",\"门头沟区\",\"房山区\",\"通州区\",\"顺义区\",\"昌平区\",\"大兴区\",\"怀柔区\",\"平谷区\",\"密云县\",\"延庆县\"],\"天津市\":[\"和平区\",\"河东区\",\"河西区\",\"南开区\",\"河北区\",\"红桥区\",\"塘沽区\",\"汉沽区\",\"大港区\",\"东丽区\",\"西青区\",\"北辰区\",\"津南区\",\"武清区\",\"宝坻区\",\"静海县\",\"宁河县\",\"蓟县\"],\"上海市\":[\"黄浦区\",\"卢湾区\",\"徐汇区\",\"长宁区\",\"静安区\",\"普陀区\",\"闸北区\",\"虹口区\",\"杨浦区\",\"宝山区\",\"闵行区\",\"嘉定区\",\"松江区\",\"金山区\",\"青浦区\",\"奉贤区\",\"浦东新区\",\"崇明县\"],\"重庆市\":[\"渝中区\",\"大渡口区\",\"江北区\",\"南岸区\",\"北碚区\",\"渝北区\",\"巴南区\",\"长寿区\",\"双桥区\",\"沙坪坝区\",\"万盛区\",\"万州区\",\"涪陵区\",\"黔江区\",\"永川区\",\"合川区\",\"江津区\",\"九龙坡区\",\"南川区\",\"綦江县\",\"潼南县\",\"荣昌县\",\"璧山县\",\"大足县\",\"铜梁县\",\"梁平县\",\"开县\",\"忠县\",\"城口县\",\"垫江县\",\"武隆县\",\"丰都县\",\"奉节县\",\"云阳县\",\"巫溪县\",\"巫山县\",\"石柱土家族自治县\",\"秀山土家族苗族自治县\",\"酉阳土家族苗族自治县\",\"彭水苗族土家族自治县\"],\"石家庄市\":[\"长安区\",\"桥东区\",\"桥西区\",\"新华区\",\"裕华区\",\"井陉矿区\",\"鹿泉市\",\"辛集市\",\"藁城市\",\"晋州市\",\"新乐市\",\"深泽县\",\"无极县\",\"赵县\",\"灵寿县\",\"高邑县\",\"元氏县\",\"赞皇县\",\"平山县\",\"井陉县\",\"栾城县\",\"正定县\",\"行唐县\"],\"唐山市\":[\"路北区\",\"路南区\",\"古冶区\",\"开平区\",\"丰南区\",\"丰润区\",\"遵化市\",\"迁安市\",\"迁西县\",\"滦南县\",\"玉田县\",\"唐海县\",\"乐亭县\",\"滦县\",\"汉沽管理区\"],\"秦皇岛市\":[\"海港区\",\"山海关区\",\"北戴河区\",\"昌黎县\",\"抚宁县\",\"卢龙县\",\"青龙满族自治县\"],\"邯郸市\":[\"邯山区\",\"丛台区\",\"复兴区\",\"峰峰矿区\",\"武安市\",\"邱县\",\"大名县\",\"魏县\",\"曲周县\",\"鸡泽县\",\"肥乡县\",\"广平县\",\"成安县\",\"临漳县\",\"磁县\",\"涉县\",\"永年县\",\"馆陶县\",\"邯郸县\"],\"邢台市\":[\"桥东区\",\"桥西区\",\"南宫市\",\"沙河市\",\"临城县\",\"内丘县\",\"柏乡县\",\"隆尧县\",\"任县\",\"南和县\",\"宁晋县\",\"巨鹿县\",\"新河县\",\"广宗县\",\"平乡县\",\"威县\",\"清河县\",\"临西县\",\"邢台县\"],\"保定市\":[\"新市区\",\"北市区\",\"南市区\",\"定州市\",\"涿州市\",\"安国市\",\"高碑店市\",\"易县\",\"徐水县\",\"涞源县\",\"顺平县\",\"唐县\",\"望都县\",\"涞水县\",\"高阳县\",\"安新县\",\"雄县\",\"容城县\",\"蠡县\",\"曲阳县\",\"阜平县\",\"博野县\",\"满城县\",\"清苑县\",\"定兴县\"],\"张家口市\":[\"桥东区\",\"桥西区\",\"宣化区\",\"下花园区\",\"张北县\",\"康保县\",\"沽源县\",\"尚义县\",\"蔚县\",\"阳原县\",\"怀安县\",\"万全县\",\"怀来县\",\"赤城县\",\"崇礼县\",\"宣化县\",\"涿鹿县\",\"塞北管理区\"],\"承德市\":[\"双桥区\",\"双滦区\",\"鹰手营子矿区\",\"兴隆县\",\"平泉县\",\"滦平县\",\"隆化县\",\"承德县\",\"丰宁满族自治县\",\"宽城满族自治县\",\"围场满族蒙古族自治县\"],\"沧州市\":[\"新华区\",\"运河区\",\"泊头市\",\"任丘市\",\"黄骅市\",\"河间市\",\"献县\",\"吴桥县\",\"沧县\",\"东光县\",\"肃宁县\",\"南皮县\",\"盐山县\",\"青县\",\"海兴县\",\"孟村回族自治县\"],\"廊坊市\":[\"安次区\",\"广阳区\",\"霸州市\",\"三河市\",\"香河县\",\"永清县\",\"固安县\",\"文安县\",\"大城县\",\"大厂回族自治县\"],\"衡水市\":[\"桃城区\",\"冀<>
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
#region 表格相关
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 选中了哪些行
|
|||
|
/// </summary>
|
|||
|
/// <param name="grid">表格对象</param>
|
|||
|
/// <returns>选中行的描述信息</returns>
|
|||
|
protected string HowManyRowsAreSelected(Grid grid)
|
|||
|
{
|
|||
|
StringBuilder sb = new StringBuilder();
|
|||
|
int selectedCount = grid.SelectedRowIndexArray.Length;
|
|||
|
if (selectedCount > 0)
|
|||
|
{
|
|||
|
sb.AppendFormat("<p><strong>共选中了 {0} 行:</strong></p>", selectedCount);
|
|||
|
sb.Append("<table class=\"result\">");
|
|||
|
|
|||
|
sb.Append("<tr><th>序号</th>");
|
|||
|
foreach (string datakey in grid.DataKeyNames)
|
|||
|
{
|
|||
|
sb.AppendFormat("<th>{0}</th>", datakey);
|
|||
|
}
|
|||
|
sb.Append("</tr>");
|
|||
|
|
|||
|
|
|||
|
for (int i = 0; i < selectedCount; i++)
|
|||
|
{
|
|||
|
int rowIndex = grid.SelectedRowIndexArray[i];
|
|||
|
sb.Append("<tr>");
|
|||
|
|
|||
|
int rownumber = rowIndex + 1;
|
|||
|
if (grid.AllowPaging)
|
|||
|
{
|
|||
|
rownumber += grid.PageIndex * grid.PageSize;
|
|||
|
}
|
|||
|
sb.AppendFormat("<td>{0}</td>", rownumber);
|
|||
|
|
|||
|
|
|||
|
// 如果是内存分页,所有分页的数据都存在,rowIndex 就是在全部数据中的顺序,而不是当前页的顺序
|
|||
|
if (grid.AllowPaging && !grid.IsDatabasePaging)
|
|||
|
{
|
|||
|
rowIndex = grid.PageIndex * grid.PageSize + rowIndex;
|
|||
|
}
|
|||
|
|
|||
|
object[] dataKeys = grid.DataKeys[rowIndex];
|
|||
|
for (int j = 0; j < dataKeys.Length; j++)
|
|||
|
{
|
|||
|
sb.AppendFormat("<td>{0}</td>", dataKeys[j]);
|
|||
|
}
|
|||
|
|
|||
|
sb.Append("</tr>");
|
|||
|
}
|
|||
|
sb.Append("</table>");
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
sb.Append("<strong>没有选中任何一行!</strong>");
|
|||
|
}
|
|||
|
|
|||
|
return sb.ToString();
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 获取性别的字面值,在 ASPX 中调用
|
|||
|
/// </summary>
|
|||
|
/// <param name="gender"></param>
|
|||
|
/// <returns></returns>
|
|||
|
protected string GetGender(object gender)
|
|||
|
{
|
|||
|
if (Convert.ToInt32(gender) == 1)
|
|||
|
{
|
|||
|
return "男";
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
return "女";
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
#region 压缩ViewState
|
|||
|
|
|||
|
//protected override object LoadPageStateFromPersistenceMedium()
|
|||
|
//{
|
|||
|
// string gzippedState = Request.Form[StringUtil.GZIPPED_VIEWSTATE_ID];
|
|||
|
// return StringUtil.LoadGzippedViewState(gzippedState);
|
|||
|
//}
|
|||
|
|
|||
|
//protected override void SavePageStateToPersistenceMedium(object viewState)
|
|||
|
//{
|
|||
|
// ClientScript.RegisterHiddenField(StringUtil.GZIPPED_VIEWSTATE_ID, StringUtil.GenerateGzippedViewState(viewState));
|
|||
|
//}
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
#region 实用函数
|
|||
|
/// <summary>
|
|||
|
/// 获取回发的参数
|
|||
|
/// </summary>
|
|||
|
/// <returns></returns>
|
|||
|
public string GetRequestEventArgument()
|
|||
|
{
|
|||
|
return Request.Form["__EVENTARGUMENT"];
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 显示通知对话框
|
|||
|
/// </summary>
|
|||
|
/// <param name="message"></param>
|
|||
|
public void ShowNotify(string message)
|
|||
|
{
|
|||
|
ShowNotify(message, MessageBoxIcon.Information);
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 显示通知对话框
|
|||
|
/// </summary>
|
|||
|
/// <param name="message"></param>
|
|||
|
/// <param name="messageIcon"></param>
|
|||
|
public void ShowNotify(string message, MessageBoxIcon messageIcon, int DisplayMilliseconds = 3000)
|
|||
|
{
|
|||
|
Notify n = new Notify();
|
|||
|
n.Target = Target.Top;
|
|||
|
n.Message = message;
|
|||
|
n.MessageBoxIcon = messageIcon;
|
|||
|
n.PositionX = Position.Center;
|
|||
|
n.PositionY = Position.Top;
|
|||
|
n.DisplayMilliseconds = DisplayMilliseconds;
|
|||
|
n.ShowHeader = false;
|
|||
|
|
|||
|
|
|||
|
n.Show();
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 显示通知对话框(消息提示框,不自动关闭)
|
|||
|
/// </summary>
|
|||
|
/// <param name="message"></param>
|
|||
|
/// <param name="messageIcon"></param>
|
|||
|
public void ShowAlert(string message, MessageBoxIcon messageIcon)
|
|||
|
{
|
|||
|
Alert alert = new Alert();
|
|||
|
alert.Message = message;
|
|||
|
alert.ShowHeader = false;
|
|||
|
alert.MessageBoxIcon = messageIcon;
|
|||
|
alert.Target = (Target)Enum.Parse(typeof(Target), "Top", true);
|
|||
|
alert.Width = 350;
|
|||
|
alert.MinWidth = 200;
|
|||
|
alert.MaxWidth = 900;
|
|||
|
alert.EnableClose = false;
|
|||
|
alert.Show();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
#region 页面下载附件方法
|
|||
|
/// <summary>
|
|||
|
/// 页面下载附件方法
|
|||
|
/// </summary>
|
|||
|
/// <param name="attachUrl"></param>
|
|||
|
public void ShowFile(string attachUrl)
|
|||
|
{
|
|||
|
string url = BLL.Funs.RootPath + attachUrl;
|
|||
|
FileInfo info = new FileInfo(url);
|
|||
|
if (!info.Exists || string.IsNullOrEmpty(attachUrl))
|
|||
|
{
|
|||
|
url = BLL.Funs.RootPath + "Images//Null.jpg";
|
|||
|
info = new FileInfo(url);
|
|||
|
}
|
|||
|
|
|||
|
string fileName = Path.GetFileName(url);
|
|||
|
long fileSize = info.Length;
|
|||
|
System.Web.HttpContext.Current.Response.Clear();
|
|||
|
System.Web.HttpContext.Current.Response.ContentType = "application/x-zip-compressed";
|
|||
|
System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
|
|||
|
System.Web.HttpContext.Current.Response.AddHeader("Content-Length", fileSize.ToString());
|
|||
|
System.Web.HttpContext.Current.Response.TransmitFile(url, 0, fileSize);
|
|||
|
System.Web.HttpContext.Current.Response.Flush();
|
|||
|
System.Web.HttpContext.Current.Response.Close();
|
|||
|
}
|
|||
|
#endregion
|
|||
|
}
|
|||
|
}
|