承上篇,將 jQuery Validate 輔助方法從擴充方法重構為 `ViewPageBase` 實例屬性,移除 `this.` 與 `()` 贅語法,打造內部 DSL 流暢體驗。
<% this.JQuery().Validate().Required("user.Name", "請輸入姓名"); %> // 擴充方法語法
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;
}
}
}
}
<% JQuery.Validate().Required("user.Name", "請輸入姓名"); %>
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(); // 隱式輸出
}
<%: JQuery.Validate()
.Required("user.Name", "請輸入姓名")
.Range("user.Age", 15, 28, "年齡 15-28")
.Email("user.Email", "請輸入有效 Email") %>
利用 `<%: ... %>` 自動呼叫 `ToString()` 輸出完整 `