<% using (Html.BeginForm()) { %> <!-- Other elements here--> <% } %> 上面兩種方法的主要區別是Html.TextBox僅僅返回一個string來注入到view中。這也是為什么使用<%=而不是標準的的代碼塊。而另一種以對象作為返回類型的方法更老練許多,比如,System.Web.Mvc.Html.MvcForm,這個對象放入using語句.對象被創建時一些HTML就會被注入到view中(嚴格說:并不是對象創建時,但很接近)還有一些事在對象被回收時將html注入view(也就是碰到”}”符號時).使用這種方法的好處是可以在using語句之間插入代碼。這使它的能力無疑比那些僅僅返回一個字符串注入頁面的方式要強大許多。
public abstract class AbstractHtmlViewObject : IViewObject { PRivate bool mDisposed;
public AbstractHtmlViewObject(ViewRequestContext requestContext, string name) { if (requestContext == null) { throw new ArgumentNullException("requestContext"); }
ViewRequestContext = requestContext; Name = name; }
public IViewRequestContext RequestContext { get; protected set; } #region IViewObject Members public object Attributes { get; set; } public string Name { get; set; } public abstract void StartView(); public abstract void EndView(); #endregion // based on System.Web.Mvc.HtmlHelper.GetModelStateValue public object GetModelStateValue(string key, Type destinationType) { object result = null; ModelState modelState; if (ViewRequestContext.HtmlHelper.ViewData.ModelState.TryGetValue( key, out modelState)) { result = modelState.Value.ConvertTo(destinationType, null); } return result; } #region IDisposable Members public void Dispose() { Dispose(true); GC.SuppressFinalize(this); }