[转载]asp.net mvc视图篇(二)

[转载]asp.net mvc(二) – ASP.NET2.0 – 博客园.

MVC中的ViewData
View在MVC模式中与用户进行最直接的接触,负责数据的呈现。注意:view只是负责数据的呈现,我们要尽量让view中不涉及业务逻辑的处理。既然 View与后台代码是相分离的,但View和Controller是如何联系在一起的呢,答案就是ViewData。

ASP.NET MVC默认使用WebForm来作为view。新建的aspx页面继承自ViewPage,所有的aspx页面都必须继承自ViewPage。我们再看一 下ViewPage的部分代码:

public class ViewPage : Page, IViewDataContainer

我们使用传统的ASP.NET开发时,经常会为了开发的需要,会写一个类似PageBase类,例如会把部分比较通用的方法写入基类。同样在MVC中,我 们也可以这样做。

第一:创建一个ViewPage<T>类:这个类主要是完成一个继承功能,对 MvcContrib.FluentHtml.ModelViewPage,MvcContrib.FluentHtml.ModelViewUserControl 的继承,实现System.Web.Mvc.ViewPage的功能。还有一个非常重要的作用就是把所有的扩展方法都体现在这个类中。类中using GuestBook.Common.HtmlHelpers;可以说明。

using GuestBook.Common.HtmlHelpers;
namespace GuestBook.Web
{
public class ViewPage<T> : MvcContrib.FluentHtml.ModelViewPage<T> where T : class
{
public ViewPage()
{

}
}

public class ViewUserControl<T> : MvcContrib.FluentHtml.ModelViewUserControl<T> where T : class
{
public ViewUserControl()
{

}
}
}

第二:对MVC进行扩展。例如对Html的扩展,我们在做增删改查类似操作时,当用户提 交后一般都会根据系统处理结果显示一段提示文字给用户。

1:创建扩展类:HtmlHelperExtensions,主要包含两个方法,一个是操作成功后的处理方法,另一个则是失败后的处理结果。

public static class HtmlHelperExtensions
{
public static string ErrorBox(this HtmlHelper htmlHelper, ViewDataBase  errorViewData)
{
if (errorViewData.ErrorMessage == null) return string.Empty;

HtmlTextWriter writer = new HtmlTextWriter(new StringWriter());

writer.AddAttribute(class, error);
writer.RenderBeginTag(HtmlTextWriterTag.Div);
writer.Write(errorViewData.ErrorMessage);
writer.RenderEndTag();
return writer.InnerWriter.ToString();
}

public static string MessageBox(this HtmlHelper htmlHelper, ViewDataBase messageViewData)
{
if (messageViewData.Message == null) return string.Empty;

HtmlTextWriter writer = new HtmlTextWriter(new StringWriter());

writer.AddAttribute(class, message);
writer.RenderBeginTag(HtmlTextWriterTag.Div);
writer.Write(messageViewData.Message);
writer.RenderEndTag();
return writer.InnerWriter.ToString();
}
}

2:我们看到上面代码中有一个类:ViewDataBase,这个类是所有ViewData的基类,里面主要包含两个字段:1,一般提示内容;2,当发生 异常时的提示内容。

public class ViewDataBase
{
public string Message { get; set; }
public string ErrorMessage { get; set; }

public ViewDataBase WithErrorMessage(string errorMessage)
{
this.ErrorMessage = errorMessage;
return this;
}
public ViewDataBase WithMessage(string message)
{
this.Message = message;
return this;
}
}

说明:我们在留言所使用的ViewData类需要继承ViewDataBase

public class GuestBookInfo : ViewDataBase
{
public string sTitle
{
get; set; }
public string sContent
{
get; set; }
public int ID
{
get; set; }
}

3:在View中调用扩展方法:

1>:页面引用代码的更改:
默认的:Inherits=”System.Web.Mvc.ViewPage<GuestBook.Common .Models.GuestBookInfo>”
扩展后的:Inherits=”GuestBook.Web.ViewPage< GuestBook.Common.Models.GuestBookInfo>”

2>:页面调用代码。

<% =Html.MessageBox (Model)%>

总结:通过扩展ViewPage和ViewData实现了对Html的扩展, 使得ViewData的功能更加灵活,好用。
注:本文参考Suteki项目。

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏