使用ASP.NET Atlas開發即時驗證使用者名稱是否被註冊的自訂Behavior

來源:互聯網
上載者:User
作者:Dflying Chen (http://dflying.cnblogs.com/)

昨天看到園內adonio朋友的使用CustomValidator類及時驗證使用者名稱,這是一個很常見的功能需求,且採用AJAX的方式可以帶給使用者更好的體驗。adonio朋友使用的是未經封裝的AJAX方法,其實我們完全可以基於現有的Atlas架構,開發出更易使用的組件。

這裡我將上述功能封裝為Atlas中的Behavior,以方便重用。關於Atlas的Behavior,請參考:在ASP.NET Atlas中建立自訂的Behavior。

該檢驗使用者名稱是否被註冊的ValidateUserNameBehavior有如下幾個屬性:

  1. serviceName:擷取或設定檢查使用者名稱的Web Service的路徑名稱。您必須指定這個屬性。
  2. methodName:擷取或設定檢查使用者名稱的Web Method名稱。您必須指定這個屬性。
  3. checkResultLabelID:擷取或設定顯示檢查結果的DOM元素的ID。您必須指定這個屬性。
  4. validMessage:擷取或設定通過檢查(使用者名稱可用)時顯示的文字。
  5. invalidMessage:擷取或設定未通過檢查(使用者名稱不可用)時顯示的文字。

同時,伺服器端檢查使用者名稱的Web Method必須有如下的簽名,其中傳入一個待檢查的使用者名稱,返回檢查後的布爾結果(可用/不可用):

public bool CheckUserName(string userNameCandidate)

關於這個ValidateUserNameBehavior的實現,您可以下載原始碼後結合在ASP.NET Atlas中建立自訂的Behavior中提到的五個步驟分析,其實是非常簡單的。其中需要注意的是如下部分:

function blurHandler() {
    if (this.control.element.value == '') {
        _checkResultLabel.innerHTML = '';
        return;
    }
    
    Sys.Net.ServiceMethod.invoke(
        _serviceName, 
        _methodName, 
        '',
        { userNameCandidate : this.control.element.value},
        _onMethodComplete
    );
}

function _onMethodComplete(result)
{
    _checkResultLabel.innerHTML = result ? _validMessage : _invalidMessage;
}

在該TextBox失去輸入焦點時候blurHandler()將被調用,並且使用AJAX方式發送檢查使用者名稱的請求到指定的Web Service。在回呼函數onMethodComplete()中,根據傳回值設定相應的顯示結果。

作為開發人員,使用這個ValidateUserNameBehavior非常簡單,請看如下的執行個體:

首先建立一個Web Service以及檢查使用者名稱的方法,這裡為了示範,實現的邏輯很簡單,只有Dflying和Admin兩個使用者,您可以根據實際情況更改:

using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;

[WebService(Namespace = "http://www.dflying.net/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class UserRegisterService : System.Web.Services.WebService
{
    private static string[] m_userData = { "Dflying", "Admin" };

    [WebMethod]
    public bool CheckUserName(string userNameCandidate)
    {
        foreach (string s in m_userData)
        {
            if (s == userNameCandidate) 
                return false;
        }
        return true;
    }
}

然後再使用者註冊的頁面上添加ScriptManager,並且引用這個ValidateUserNameBehavior.js檔案:

<atlas:ScriptManager runat="server" ID="ScriptManager1">
    <Scripts>
        <atlas:ScriptReference Path="ValidateUserNameBehavior.js" />
    </Scripts>
</atlas:ScriptManager>

然後是提供使用者輸入使用者名稱的input,以及相應的顯示檢驗結果的span:

<div>
    UserName:
    <input type="text" id="userName" class="input" />
    <span id="userNameError" ></span>
</div>

最後是Atlas的XML Script,將上面的input提升為Atlas TextBox控制項,在它的Behavior中添加我們的ValidateUserNameBehavior,並指定該Behavior的屬性:

<script type="text/xml-script">
    <page xmlns:script="http://schemas.microsoft.com/xml-script/2005">
        <components>
            <textBox id="userName">
                <behaviors>
                    <validateUserNameBehavior checkResultLabelID="userNameError" serviceName="UserRegisterService.asmx"
                        methodName="CheckUserName" />
                </behaviors>
            </textBox>
        </components>
    </page>
</script>

瀏覽器中測試一下,輸入一個可用的使用者名稱:

輸入Dflying,哦已經被註冊了:

該樣本程式以及相應的ValidateUserNameBehavior的原始碼可以在此下載:http://files.cnblogs.com/dflying/ValidateUserNameBehavior.zip

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.