前言:
昨天剛好有人問了這個問題,因此就針對這個問題,補上一篇吧。
正文:
如圖:在用戶編輯列表中,用戶名是會自動檢測是否已存在的。

具體對應的Html內容如下:
<label><em>*</em>用戶名:</label>
<input name="UserName" id="UserName" missingmessage="" class='easyui-validatebox' validtype="exists['UserName']" required="required" />
</div>
<div class="short">

驗證類型的參數是一個字符串,為字段的name。
發起的請求內容:

核心原理:
具體的JS實現在:Aries.EasyUIExtend.js 文件中。
validator: function (value, param) {
if (!param[0]) {
this.message = $Core.Lang.ruleError;
return false;
}
var data = {};
data.n = param[0].name || param[0];
data.v = value;
if (data.n.indexOf(',') > -1) {
var items = data.n.split(',');
if (items.length > 1) {
data.n = items[0];
var $input = $(":input[name='" + items[1] + "']");
if ($input) {
data.n2 = items[1];
data.v2 = $input.val();
}
if (items.length > 2) {
var $input = $(":input[name='" + items[2] + "']");
if ($input) {
data.n3 = items[2];
data.v3 = $input.val();
}
}
}
}
var id = param[1] || AR.Utility.queryString('id');
if (id) data.id = id;
//method, objName, data, async, url, callback, isShowProgress
var result = AR.Ajax.get("Exists", AR.Form.tableName, data);
if (result) {
if (result.success) {
this.message = $Core.Lang.dataExists;
return false;
}
return true;
}
else {
this.messgage = $Core.Lang.requestFail;
return false;
}
}
},
這段實現,可以帶多兩個參數,即可以滿足三個聯合主鍵組成的唯一。
即配置可以成Exsists['name1,name2,name3','主鍵ID的值,不傳則從請求的參數獲取']。
對應的后台代碼:
[ActionKey("View,Get")]
/// <summary>
/// 是否存在某數據。
/// </summary>
public void Exists()
{
string name = Query<string>("n", "");
string value = Query<string>("v", "");
string name2 = Query<string>("n2", "");
string value2 = Query<string>("v2", "");
string name3 = Query<string>("n3", "");
string value3 = Query<string>("v3", "");//支持到三個,可以了
bool result = false;
using (MAction action = new MAction(ObjCode))
{
string id = GetID;
string where = string.Format("{0}='{1}'", name, value);
if (name2 != "" && value2 != "")
{
where += string.Format(" and {0}='{1}'", name2, value2);
}
if (name3 != "" && value3 != "")
{
where += string.Format(" and {0}='{1}'", name3, value3);
}
if (!string.IsNullOrEmpty(id))
{
where += string.Format(" and {0}<>'{1}'", action.Data.PrimaryCell.ColumnName, id);
}
result = action.Exists(where);
}
jsonResult = JsonHelper.OutResult(result, string.Empty);
}
擴展:在行內編輯,如何實現該功能:

V5.4.1.3或以前:這里只給出思路,dg.options.onEditing事件中,可以拿到編輯框,可以動態賦加驗證屬性,也可以拿到值,再調用Exsits手工檢測。
V5.4.1.4版本,只要在配置表頭里,把唯一項打勾即可。

