首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET MVC 自訂視圖輔助方法 (下):簡化入口、流暢介面與 ViewPage 基類重構

     編輯:關於ASP.NET

承上篇,將 jQuery Validate 輔助方法從擴充方法重構為 `ViewPageBase` 實例屬性,移除 `this.` 與 `()` 贅語法,打造內部 DSL 流暢體驗。

問題回顧


<% this.JQuery().Validate().Required("user.Name", "請輸入姓名"); %>  // 擴充方法語法

解決方案:自訂 ViewPage 基類


namespace MvcApp.Views
{
    public class ViewPageBase : ViewPage
    {
        private JQueryHelper _jquery;
        public JQueryHelper JQuery
        {
            get
            {
                if (_jquery == null)
                    _jquery = new JQueryHelper(this.ViewContext, this);
                return _jquery;
            }
        }
    }
}

Web.config 註冊基類



  
    
  

流暢語法


<% JQuery.Validate().Required("user.Name", "請輸入姓名"); %>

鏈式 API 設計


public class JQueryHelper
{
    public ValidateBuilder Validate() => new ValidateBuilder(_viewContext, _page);
}

public class ValidateBuilder
{
    public ValidateBuilder Required(string name, string msg)
    {
        _rules[name] = new { required = true, messages = new { required = msg } };
        return this; // 回傳 this 實現鏈式
    }
    public ValidateBuilder Range(string name, int min, int max, string msg) { ... }
    public ValidateBuilder Email(string name, string msg) { ... }
    public override string ToString() => RenderScript(); // 隱式輸出
}

View 中隱式輸出


<%: JQuery.Validate()
    .Required("user.Name", "請輸入姓名")
    .Range("user.Age", 15, 28, "年齡 15-28")
    .Email("user.Email", "請輸入有效 Email") %>

利用 `<%: ... %>` 自動呼叫 `ToString()` 輸出完整 `

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved