asp.net mvc(二)

來源:互聯網
上載者:User

   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項目。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.