• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

asp.net mvc(二)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

   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 == nullreturn 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 == nullreturn 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 { getset; }
        
public string ErrorMessage { getset; }

        
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
        { 
getset; }
        
public string sContent
        { 
getset; }
        
public int ID
        { 
getset; }
    }

      
       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人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap