-
关键配置:
// ZNBM\eKing.SzdfPage\Areas\ZnbmJygl\JYGL\JyglHylx\EkSzdfDetailForm__Page.cs
#region TheCode - 代号
// TheCode - 代号
ekx = _TheCode;
ivc = ekx;
ivc.EmValidFlagV
=
EkPageCreate.Enums.ValidFlag.EmValidFlag.忽略大小写唯一性校验;
#endregion TheCode - 代号
代码展开:
1、
// ZNBM\eKing.EkPageCreate\WebCtrls\EkxInputCtrls\IValidCtrl.cs //
// 设置扩展校验的代号 //
/// <summary>
/// <para>获得扩展校验的代号,缺省根据校验类型做判断</para>
/// <para>唯一性校验:checkunique</para>
/// <para>关联校验:rc</para>
/// </summary>
/// <returns></returns>
public string ValidExtendCodeGet()
{
if (ValidExtendCode != null)
return ValidExtendCode;
switch (EmValidFlagV)
{
case Enums.ValidFlag.EmValidFlag.不校验:
return "";
case Enums.ValidFlag.EmValidFlag.自定义唯一性校验:
return "checkunique";
case Enums.ValidFlag.EmValidFlag.忽略大小写唯一性校验:
return "basenocasecheckunique";
case Enums.ValidFlag.EmValidFlag.完全唯一性校验:
return "basecheckunique";
case Enums.ValidFlag.EmValidFlag.校验:
return "";
default:
return "";
}
}
2、
// \Management\Content\js\ZNBM\znbm.ekcheck.js
// BaseJsCheckInput4CheckUnique 方法
// 设置JS校验 //
// 唯一性校验 //
function BaseJsCheckInput4CheckUnique(pkId, ignoreCase, selfThis, valueThis) {
// 校验唯一性 //
// 获得控件值 //
var ctrlValue = EkGetCtrlValue(valueThis);
// 获得控件id //
var ctrlId = EkGetCtrlId(selfThis);
// 校验代号的唯一性 //
// 调用的MVC地址 //
var ajaxUrl = "BaseCheckUnique";
// 获得搜索的数据 //
var ajxData = [];
// 关键字 //
ajxData.push({ name: "_id", value: pkId });
// 是否忽略大小写 //
if (ignoreCase) {
ajxData.push({ name: "ignorecase", value: "1" });
}
else {
ajxData.push({ name: "ignorecase", value: "0" });
}
// 控件id //
ajxData.push({ name: "ctrlid", value: ctrlId });
// 输入值 //
ajxData.push({ name: "inputvalue", value: ctrlValue });
var theResult = false;
var errMsg = "";
$.ajax({
cache: false,
async: false, // 这里用false,不走异步模式 //
url: ajaxUrl,
type: "post",
data: ajxData,
success: function (rData) {
if (rData == null) {
theResult = false;
}
else {
theResult = rData.IsSucc;
errMsg = rData.Msg;
}
}
});
if (theResult)
return true;
if (errMsg == null || errMsg == "")
errMsg = "唯一校验失败";
EkChangeCss(selfThis, errMsg);
return false;
}
3、
// Management\Content\js\ZNBM\znbm.ekcheck.js
// EkJudgeValidateByThis
// 获得扩展校验 //
var validExtendCodeV = $(selfThis).attr("validextendcode");
if (validExtendCodeV == undefined)
return validateFlag;
if (validExtendCodeV == null || validExtendCodeV == "")
return validateFlag;
if (validExtendCodeV == "basenocasecheckunique")
{
// 封装的唯一性校验(忽略大小写) //
validateFlag = BaseJsCheckInput4CheckUnique(pkId, true, selfThis, valueThis);
}
else if (validExtendCodeV == "basecheckunique") {
// 封装的唯一性校验(不忽略大小写) //
validateFlag = BaseJsCheckInput4CheckUnique(pkId, false, selfThis, valueThis);
}
else {
// 必须扩展JS中有 JsCheckInput4ExtendCode 这个方法 //
validateFlag = JsCheckInput4ExtendCode(pkId, selfThis, valueThis, validExtendCodeV);
}
// 保护代码 //
if (validateFlag == undefined)
return true;
return validateFlag;
4、
// Management\Classes\ZNBM\ZnbmCommonController.cs //
// BaseCheckUnique
#region 唯一性校验
/// <summary>
/// 唯一性校验
/// </summary>
/// <param name="pkId"></param>
/// <param name="dcName"></param>
/// <param name="ignoreCase"></param>
/// <param name="inputValue"></param>
/// <param name="emSVL"></param>
/// <param name="xdbHelper"></param>
/// <returns></returns>
protected bool BaseCheckUnique8Params
(
string pkId,
string dcName,
bool ignoreCase,
string inputValue,
eKing.EkPageCreate.Enums.SaveValueLogic.EmSaveValueLogic emSVL,
DBHelper xdbHelper
)
{
bool theResult = true;
bool bIsCreate = true;
if (xdbHelper == null)
{
xdbHelper
=
SlowX.DAL.Helpers.DBHelper.CreateDBHelper();
}
else
{
// 没有打开链接 //
bIsCreate = xdbHelper.IsNotOpen();
}
try
{
if (bIsCreate)
xdbHelper.OpenDBHelper();
BaseBusiness
bll
=
BaseBusinessCurGet();
BaseEntity
entity
=
bll.CreateBaseEntity();
IQueryDriver iq = entity;
EntityFieldInfo pkInfo = entity.GetIDEntityFieldInfo();
EntityFieldInfo dcInfo = entity.GetExistEntityFieldInfo(dcName);
if (pkId == null || pkId.Length == 0)
{
iq.AddIQueryItemWithEntityFieldInfo
(
pkInfo,
SlowX.DAL.Enums.SqlLink.EmSqlLink.NotEqual,
null
);
}
else
{
iq.AddIQueryItemWithEntityFieldInfo
(
pkInfo,
SlowX.DAL.Enums.SqlLink.EmSqlLink.NotEqual,
pkId
);
}
if (inputValue == null)
{
inputValue = "";
}
else
{
if (ignoreCase)
{
inputValue = inputValue.ToLower();
}
}
eKing.EkPageCreate.Utils.CommonUtil
cu
=
eKing.EkPageCreate.Utils.CommonUtil.instance;
// 转义值类型 //
object oValue = cu.SaveValueGetValueObj
(
inputValue,
emSVL
);
if (ignoreCase)
{
// theCode == theCode //
iq.AddIQueryItemWithEntityFieldInfo
(
dcInfo,
SlowX.Core.Enums.StringCase.EmStringCase.小写,
oValue
);
}
else
{
iq.AddIQueryItemWithEntityFieldInfo(dcInfo, oValue);
}
// 不存在表示唯一 //
theResult = !bll.IsExist(entity, xdbHelper);
if (bIsCreate)
xdbHelper.EndDBHelper();
}
catch (Exception err)
{
if (bIsCreate)
xdbHelper.TranDBHelper();
throw err;
}
finally
{
if (bIsCreate)
xdbHelper.FinallyDBHelper();
}
return theResult;
}
/// <summary>
/// 唯一性校验
/// </summary>
/// <param name="xdbHelper">数据库链接串</param>
/// <returns></returns>
protected OperResult
BaseCheckUniqueOper(DBHelper xdbHelper)
{
// Http参数过来的相关的参数名 //
HttpContextName hcn = HttpContextName.instance;
// 获得关键字 //
string pkId = Request.Form[hcn._id];
// 获得输入值 //
string inputValue = Request.Form[hcn.InputValue];
// 是否忽略大小写 //
bool ignoreCase = (Request.Form[hcn.IgnoreCase] == "1");
// 找到控件 //
string ctrlId = Request.Form[hcn.CtrlId];
eKing.EkPageCreate.WebCtrls.EkxPage eKp
=
EkxPageGet();
EkxInputCtrl ekx = eKp.FindEkxInputCtrl(ctrlId);
if(ekx==null)
{
return OperResult.ToError("没有找到控件" + ctrlId);
}
string dcName = ekx.SaveValueDataColumnNameGet();
bool bFlag = BaseCheckUnique8Params
(
pkId,
dcName,
ignoreCase,
inputValue,
ekx.EmSaveValueLogicV,
xdbHelper
);
if (bFlag)
{
return OperResult.ToSucc("");
}
else
{
return OperResult.ToError("代号不唯一");
}
}
/// <summary>
/// 唯一性校验
/// </summary>
/// <returns>OperResult[IsSucc:是否成功;Msg:结果提示]</returns>
public ActionResult BaseCheckUnique()
{
OperResult op = null;
try
{
op = BaseCheckUniqueOper(null);
}
catch (Exception err)
{
op = DetailSaveOperResult.DetailSaveToError("发生异常:" + err.Message);
BaseWriteException(err);
}
ContentResult theResult = new ContentResult();
theResult.ContentEncoding = UTF8Encoding.UTF8;
theResult.ContentType = MIMETypes.Json;
theResult.Content = op.ToJson();
return theResult;
}
#endregion 唯一性校验
几个辅助代码:
1、
通过控件ID找到EkxInputCtrl
// ZNBM\eKing.EkPageCreate\WebCtrls\EkxPage.cs
// FindEkxInputCtrl
/// <summary>
/// 找到输入控件
/// </summary>
/// <param name="ctrlId">通过控件ID(ctrlId)找到EkxInputCtrl</param>
/// <returns></returns>
public EkxInputCtrl FindEkxInputCtrl(string ctrlId)
{
if (ctrlId == null || ctrlId.Length == 0)
return null;
// 获得Form的表单 //
List<EkxForm> formList = FormListGet();
List<EkxInputCtrl> ctrlList = null;
foreach (EkxForm f in formList)
{
if (f == null)
continue;
ctrlList = f.CtrlListGet();
if (ctrlList == null)
continue;
foreach (EkxInputCtrl ekx in ctrlList)
{
if (ekx == null)
continue;
if (ekx.PkId == ctrlId)
return ekx;
}
}
return null;
}
2、
获得校验对应的字段名
// ZNBM\eKing.EkPageCreate\WebCtrls\EkxInputCtrls\ICtrlSaveValue.cs
/// <summary>
/// 获得保存值的字段名
/// </summary>
/// <returns></returns>
public string SaveValueDataColumnNameGet()
{
string str = SaveValueDataColumnName;
if (str == null || str.Length == 0)
return ConvertToDataColumName();
if (str == "-")
return "";
return str;
}
/// <summary>
/// 转义控件的字段名
/// </summary>
/// <returns></returns>
public string ConvertToDataColumName()
{
string strId = GetCtrlId();
if (strId == null)
return "";
int idx = strId.IndexOf("_");
if (idx == -1)
return strId;
return strId.Substring(idx + 1);
}
3、
转义保存值
// ZNBM\eKing.EkPageCreate\Utils\Common\ConvertUtil.cs
/// <summary>
/// 通过EmSaveValueLogic转义值类型
/// </summary>
/// <param name="str"></param>
/// <param name="em"></param>
/// <returns></returns>
public object SaveValueGetValueObj
(
string str,
eKing.EkPageCreate.Enums.SaveValueLogic.EmSaveValueLogic em
)
{
switch (em)
{
default:
case Enums.SaveValueLogic.EmSaveValueLogic.字符串:
return str;
case Enums.SaveValueLogic.EmSaveValueLogic.字符串Trim:
if (str == null)
return str;
return str.Trim();
case Enums.SaveValueLogic.EmSaveValueLogic.时间:
return DateTimeNullConvertTo(str);
case Enums.SaveValueLogic.EmSaveValueLogic.时间月:
return DateTimeMonthNullConvertTo(str);
case Enums.SaveValueLogic.EmSaveValueLogic.布尔:
if (str == "true" || str == "1")
return "1";
else
return "0";
}
}
-
// Management\Classes\ZNBM\ZnbmCommonController.cs //
// BaseCheckUnique
#region 唯一性校验
/// <summary>
/// 唯一性校验
/// </summary>
/// <param name="pkId"></param>
/// <param name="dcName"></param>
/// <param name="ignoreCase"></param>
/// <param name="inputValue"></param>
/// <param name="emSVL"></param>
/// <param name="xdbHelper"></param>
/// <returns></returns>
protected bool BaseCheckUnique8Params
(
string pkId,
string dcName,
bool ignoreCase,
string inputValue,
eKing.EkPageCreate.Enums.SaveValueLogic.EmSaveValueLogic emSVL,
DBHelper xdbHelper
)
{
bool theResult = true;
bool bIsCreate = true;
if (xdbHelper == null)
{
xdbHelper
=
SlowX.DAL.Helpers.DBHelper.CreateDBHelper();
}
else
{
// 没有打开链接 //
bIsCreate = xdbHelper.IsNotOpen();
}
try
{
if (bIsCreate)
xdbHelper.OpenDBHelper();
BaseBusiness
bll
=
BaseBusinessCurGet();
BaseEntity
entity
=
bll.CreateBaseEntity();
IQueryDriver iq = entity;
EntityFieldInfo pkInfo = entity.GetIDEntityFieldInfo();
EntityFieldInfo dcInfo = entity.GetExistEntityFieldInfo(dcName);
if (pkId == null || pkId.Length == 0)
{
iq.AddIQueryItemWithEntityFieldInfo
(
pkInfo,
SlowX.DAL.Enums.SqlLink.EmSqlLink.NotEqual,
null
);
}
else
{
iq.AddIQueryItemWithEntityFieldInfo
(
pkInfo,
SlowX.DAL.Enums.SqlLink.EmSqlLink.NotEqual,
pkId
);
}
if (inputValue == null)
{
inputValue = "";
}
else
{
if (ignoreCase)
{
inputValue = inputValue.ToLower();
}
}
eKing.EkPageCreate.Utils.CommonUtil
cu
=
eKing.EkPageCreate.Utils.CommonUtil.instance;
// 转义值类型 //
object oValue = cu.SaveValueGetValueObj
(
inputValue,
emSVL
);
if (ignoreCase)
{
// theCode == theCode //
iq.AddIQueryItemWithEntityFieldInfo
(
dcInfo,
SlowX.Core.Enums.StringCase.EmStringCase.小写,
oValue
);
}
else
{
iq.AddIQueryItemWithEntityFieldInfo(dcInfo, oValue);
}
// 不存在表示唯一 //
theResult = !bll.IsExist(entity, xdbHelper);
if (bIsCreate)
xdbHelper.EndDBHelper();
}
catch (Exception err)
{
if (bIsCreate)
xdbHelper.TranDBHelper();
throw err;
}
finally
{
if (bIsCreate)
xdbHelper.FinallyDBHelper();
}
return theResult;
}
/// <summary>
/// 唯一性校验
/// </summary>
/// <param name="xdbHelper">数据库链接串</param>
/// <returns></returns>
protected OperResult
BaseCheckUniqueOper(DBHelper xdbHelper)
{
// Http参数过来的相关的参数名 //
HttpContextName hcn = HttpContextName.instance;
// 获得关键字 //
string pkId = Request.Form[hcn._id];
// 获得输入值 //
string inputValue = Request.Form[hcn.InputValue];
// 是否忽略大小写 //
bool ignoreCase = (Request.Form[hcn.IgnoreCase] == "1");
// 找到控件 //
string ctrlId = Request.Form[hcn.CtrlId];
eKing.EkPageCreate.WebCtrls.EkxPage eKp
=
EkxPageGet();
EkxInputCtrl ekx = eKp.FindEkxInputCtrl(ctrlId);
if(ekx==null)
{
return OperResult.ToError("没有找到控件" + ctrlId);
}
string dcName = ekx.SaveValueDataColumnNameGet();
bool bFlag = BaseCheckUnique8Params
(
pkId,
dcName,
ignoreCase,
inputValue,
ekx.EmSaveValueLogicV,
xdbHelper
);
if (bFlag)
{
return OperResult.ToSucc("");
}
else
{
return OperResult.ToError("代号不唯一");
}
}
/// <summary>
/// 唯一性校验
/// </summary>
/// <returns>OperResult[IsSucc:是否成功;Msg:结果提示]</returns>
public ActionResult BaseCheckUnique()
{
OperResult op = null;
try
{
op = BaseCheckUniqueOper(null);
}
catch (Exception err)
{
op = DetailSaveOperResult.DetailSaveToError("发生异常:" + err.Message);
BaseWriteException(err);
}
ContentResult theResult = new ContentResult();
theResult.ContentEncoding = UTF8Encoding.UTF8;
theResult.ContentType = MIMETypes.Json;
theResult.Content = op.ToJson();
return theResult;
}
#endregion 唯一性校验
-
// Management\Content\js\ZNBM\znbm.ekcheck.js
// EkJudgeValidateByThis
// 获得扩展校验 //
var validExtendCodeV = $(selfThis).attr("validextendcode");
if (validExtendCodeV == undefined)
return validateFlag;
if (validExtendCodeV == null || validExtendCodeV == "")
return validateFlag;
if (validExtendCodeV == "basenocasecheckunique")
{
// 封装的唯一性校验(忽略大小写) //
validateFlag = BaseJsCheckInput4CheckUnique(pkId, true, selfThis, valueThis);
}
else if (validExtendCodeV == "basecheckunique") {
// 封装的唯一性校验(不忽略大小写) //
validateFlag = BaseJsCheckInput4CheckUnique(pkId, false, selfThis, valueThis);
}
else {
// 必须扩展JS中有 JsCheckInput4ExtendCode 这个方法 //
validateFlag = JsCheckInput4ExtendCode(pkId, selfThis, valueThis, validExtendCodeV);
}
// 保护代码 //
if (validateFlag == undefined)
return true;
return validateFlag;
-
// \Management\Content\js\ZNBM\znbm.ekcheck.js
// BaseJsCheckInput4CheckUnique 方法
// 设置JS校验 //
// 唯一性校验 //
function BaseJsCheckInput4CheckUnique(pkId, ignoreCase, selfThis, valueThis) {
// 校验唯一性 //
// 获得控件值 //
var ctrlValue = EkGetCtrlValue(valueThis);
// 获得控件id //
var ctrlId = EkGetCtrlId(selfThis);
// 校验代号的唯一性 //
// 调用的MVC地址 //
var ajaxUrl = "BaseCheckUnique";
// 获得搜索的数据 //
var ajxData = [];
// 关键字 //
ajxData.push({ name: "_id", value: pkId });
// 是否忽略大小写 //
if (ignoreCase) {
ajxData.push({ name: "ignorecase", value: "1" });
}
else {
ajxData.push({ name: "ignorecase", value: "0" });
}
// 控件id //
ajxData.push({ name: "ctrlid", value: ctrlId });
// 输入值 //
ajxData.push({ name: "inputvalue", value: ctrlValue });
var theResult = false;
var errMsg = "";
$.ajax({
cache: false,
async: false, // 这里用false,不走异步模式 //
url: ajaxUrl,
type: "post",
data: ajxData,
success: function (rData) {
if (rData == null) {
theResult = false;
}
else {
theResult = rData.IsSucc;
errMsg = rData.Msg;
}
}
});
if (theResult)
return true;
if (errMsg == null || errMsg == "")
errMsg = "唯一校验失败";
EkChangeCss(selfThis, errMsg);
return false;
}
-
// ZNBM\eKing.EkPageCreate\WebCtrls\EkxInputCtrls\IValidCtrl.cs //
// 设置扩展校验的代号 //
/// <summary>
/// <para>获得扩展校验的代号,缺省根据校验类型做判断</para>
/// <para>唯一性校验:checkunique</para>
/// <para>关联校验:rc</para>
/// </summary>
/// <returns></returns>
public string ValidExtendCodeGet()
{
if (ValidExtendCode != null)
return ValidExtendCode;
switch (EmValidFlagV)
{
case Enums.ValidFlag.EmValidFlag.不校验:
return "";
case Enums.ValidFlag.EmValidFlag.自定义唯一性校验:
return "checkunique";
case Enums.ValidFlag.EmValidFlag.忽略大小写唯一性校验:
return "basenocasecheckunique";
case Enums.ValidFlag.EmValidFlag.完全唯一性校验:
return "basecheckunique";
case Enums.ValidFlag.EmValidFlag.校验:
return "";
default:
return "";
}
}
-
// ZNBM\eKing.SzdfPage\Areas\ZnbmJygl\JYGL\JyglHylx\EkSzdfDetailForm__Page.cs
#region TheCode - 代号
// TheCode - 代号
ekx = _TheCode;
ivc = ekx;
ivc.EmValidFlagV
=
EkPageCreate.Enums.ValidFlag.EmValidFlag.忽略大小写唯一性校验;
#endregion TheCode - 代号
-
// ZNBM\eKing.EkPageCreate\Utils\Common\ConvertUtil.cs
/// <summary>
/// 通过EmSaveValueLogic转义值类型
/// </summary>
/// <param name="str"></param>
/// <param name="em"></param>
/// <returns></returns>
public object SaveValueGetValueObj
(
string str,
eKing.EkPageCreate.Enums.SaveValueLogic.EmSaveValueLogic em
)
{
switch (em)
{
default:
case Enums.SaveValueLogic.EmSaveValueLogic.字符串:
return str;
case Enums.SaveValueLogic.EmSaveValueLogic.字符串Trim:
if (str == null)
return str;
return str.Trim();
case Enums.SaveValueLogic.EmSaveValueLogic.时间:
return DateTimeNullConvertTo(str);
case Enums.SaveValueLogic.EmSaveValueLogic.时间月:
return DateTimeMonthNullConvertTo(str);
case Enums.SaveValueLogic.EmSaveValueLogic.布尔:
if (str == "true" || str == "1")
return "1";
else
return "0";
}
}
-
// ZNBM\eKing.EkPageCreate\WebCtrls\EkxInputCtrls\ICtrlSaveValue.cs
/// <summary>
/// 获得保存值的字段名
/// </summary>
/// <returns></returns>
public string SaveValueDataColumnNameGet()
{
string str = SaveValueDataColumnName;
if (str == null || str.Length == 0)
return ConvertToDataColumName();
if (str == "-")
return "";
return str;
}
/// <summary>
/// 转义控件的字段名
/// </summary>
/// <returns></returns>
public string ConvertToDataColumName()
{
string strId = GetCtrlId();
if (strId == null)
return "";
int idx = strId.IndexOf("_");
if (idx == -1)
return strId;
return strId.Substring(idx + 1);
}
-
// ZNBM\eKing.EkPageCreate\WebCtrls\EkxPage.cs
// FindEkxInputCtrl
/// <summary>
/// 找到输入控件
/// </summary>
/// <param name="ctrlId">通过控件ID(ctrlId)找到EkxInputCtrl</param>
/// <returns></returns>
public EkxInputCtrl FindEkxInputCtrl(string ctrlId)
{
if (ctrlId == null || ctrlId.Length == 0)
return null;
// 获得Form的表单 //
List<EkxForm> formList = FormListGet();
List<EkxInputCtrl> ctrlList = null;
foreach (EkxForm f in formList)
{
if (f == null)
continue;
ctrlList = f.CtrlListGet();
if (ctrlList == null)
continue;
foreach (EkxInputCtrl ekx in ctrlList)
{
if (ekx == null)
continue;
if (ekx.PkId == ctrlId)
return ekx;
}
}
return null;
}