本文章是由機器翻譯。

Web 移轉

將 Web 應用程式從 WebMatrix 移轉到 ASP.NET MVC 3

Brandon Satrom

下載程式碼範例

這個過去年 1 月 Microsoft 導入 microsoft Web 程式開發的新程式設計模型。NET 架構,稱為 ASP。NET Web 網頁。目前支援根據預設,在 WebMatrix (web.ms/WebMatrix),網頁是以頁面為中心的程式設計模型,運作方式十分類似 PHP,其中每一頁包含它自己的商務邏輯、 資料存取和動態內容的 HTML 呈現至瀏覽器。

有各種理由而建置 WebMatrix 中的網站。但是如果您知道您想要移至 Visual Studio 在某些時候將來吗?如果 ASP。NET MVC 3 是您的最終狀態,您是否需要 re-develop 站台時移轉的時間就會發生?如果你的 boxing 您自己的 WebMatrix 和 Web 網頁,怕。

網頁 — 核心 ASP 的一部份。NET 架構 — 不在建置記住的彈性。以及時有可能會不斷強制您移轉到 ASP 網頁沒有技術限制。NET MVC,有時候可能會出一些使得適合您的小組、 產品或公司來執行這項操作。

在本文中我們將討論一些您可能會選擇移轉的原因 (以及的可能原因不)。我們也將討論將您的 Web 網頁的網站移到 ASP 的策略。NET MVC 如果您選擇要執行這項操作。我們將討論如何將從頁面移到檢視、 如何處理商務邏輯和 helper 程式碼,以及如何在應用程式中引入模型。最後,我們將討論,並示範如何保留現有的網站 Url,透過路由,並在必要時支援永久重新導向。

何時要遷移?

之前我們深入從網頁移轉至 ASP 的原因。NET MVC 中,讓我們來討論作這類移動幾個原因。簡單來說,不應該將您的網站從 Web 網頁中,移至 ASP 中。NET MVC,因為您是恐怕您的應用程式將不會縮放。由於 Web 網頁建置在 ASP 的最上層。NET 中,它提供許多的撰寫 asp 應用程式相同的效能特性。NET MVC 或 Web Form。很明顯地,每個應用程式型別具有稍有不同的執行模型,但沒有任何 asp。NET MVC 超出方塊,讓它原本就是多或更少可擴充比網頁應用程式。小數位數和效能是就像很多有關設計讓您在建置您的網站,不如說它是基礎架構您的決策選擇。

它也不是將您的網站從 Web 網頁移至 ASP 是個好主意。NET MVC,因為它很酷、 性感而且您聽到的每個人都這麼做,或只是因為您要使用與您在 Visual Studio 中的網站 — 您可以處理的 Web 網頁的網站已經。ASP。NET MVC 是在 Web 應用程式架構中,不讓您的網站立即更好的魔法棒的選擇。從網頁移轉至 ASP。NET MVC 是一個選擇,不需要。與而 Microsoft 服務曾完成太好了使此遷移,可能又輕鬆的工作,它將仍成本您時間、 資源及金錢,任何遷移過程一樣。基於這些理由,務必確定您正在移轉至 ASP。NET MVC 正確的原因。

一個合理的原因可能是因為是對您和您的小組很重要的單元測試。因為 Web 網頁模型是以頁面為中心,所以不能使用現有的單元測試工具與 Web 網頁的網站。Web UI 測試 — 使用像是 WatiN 或 Selenium 的工具 — 仍然可行的但程式碼層級的單元測試工具像 NUnit 或 MsTest 不一樣。如果您的網站已經變得複雜程度和單元測試是給您,移轉到 ASP 很重要。NET MVC 有意義。

如果您希望單元測試程式碼中,有可能是因為您在應用程式中也喜歡一定程度的分離問題。和固然很有可能以初始狀態,建立分開的程式碼使用的協助程式和 Web 網頁中的程式碼檔,模型並不會自行提供這項區隔為 ASP 自然。NET MVC 會執行。如果分離問題是很重要,而您想這類分離,進而採行的應用程式架構,遷移是很有效的選擇。

超過這兩種,移轉其他原因可能會派上用處站台或組織的內容而定。如果您有持續增加小組和一個站台的複雜度增加且需要更豐富的商業功能,您就會移轉。移轉也可能需要做一些更能用於原始檔控制一類的資訊之更豐富的開發生態系統、 使用 web 測試,以此類推。

準備移轉

在本文中,我們將會隨附於 WebMatrix 的相片藝廊範本站台,以及移轉至 ASP。NET MVC。遷移程序的核心從頁面移至模型、 控制站和檢視表,但我們需要執行一些準備工作之前我們可以前往該處。

因為我們詳細說明涉及手動移轉這個簡短的文件中的所有步驟,我們將無法提供每個步驟相等注意。我們的目標是為了解決的主要步驟,以及最少提及的次要的考量。我們也選擇要忽略的整體的轉換,例如資料存取的最佳作法、 潛在的組件結構、 相依性的插入和類似核心之關係的項目。這些項目都是很重要,但其中有許多會下降開發文化特性和個人的喜好設定,而且可以會處理所有在移轉後重構。

也很重要的一點我們不秘密的在 WebMatrix 中的 Visual Studio 功能開啟用於這份文件,將會為網站專案在 Visual Studio 中開啟您目前的網站。即使您選擇不要移轉至 ASP,也很歡迎使用此選項。NET MVC,但我們想要 asp 使用 Visual Studio Web 應用程式專案型別。NET MVC,開頭空白的站台,並透過手動移轉項目。

因此,我們就先從遷移選取檔案 |新增 |專案,並選取 [ASP。NET MVC 3 Web 應用程式使用 「 空白 」 範本,為預設檢視引擎使用剃刀。

一旦您有目標應用程式中設定,您必須執行一些初始遷移工作。以下是逐項列出數的初始步驟:

  1. 新增到 ASP 使用您的 Web 網頁的網站中任何套件。NET MVC 站台 NuGet (nuget.org)。
  2. 將參考加入至 System.Web.Helpers、 WebMatrix.Data 和 WebMatrix.WebData。設定每一個要複製到本機 = true 的屬性窗格中。
  3. 將 _AppStart.cshtml 的內容移到 Global.asax 的 Application_Start 方法。雖然可以移動及使用 _AppStart 時,我們建議您插入與現有的 ASP Global.asax 集中其邏輯。NET MVC 啟始程式碼。
  4. 新增 < 啟用 roleManager = true / > 以 <system.web> 根 web.config 區段。相片圖庫應用程式使用新位於 WebMatrix.WebData,因此我們必須該項目我們要函式的站台設定中的 WebSecurity 成員資格提供者。
  5. 在 [應用程式中的 [內容] 或 [指令碼] 資料夾下移動任何樣式表、 指令碼檔和影像。更新這些檔案中的任何資源連結到其新的路徑。
  6. 修改為指向組件庫控制器和預設動作的 Global.asax 中路由的預設值。
  7. 將複製到您的網站的 App_Data 資料夾的 [App_Data] 資料夾中找到的 SQL 壓縮資料庫。如果您正使用另一個資料庫為您的網站,將此連接字串加入至您的應用程式的 Web.Config 檔案。

從頁面移到檢視

一旦您完成 ASP 初始設定。NET MVC 站台,您必須已準備好移轉現有網站的核心:網頁。在 Web 網頁,網頁中 (。 [cs/vb] html) 包含標記、 商務邏輯和該網頁所需的任何資料存取。您在移轉至 ASP 期間的工作主要元件。NET MVC 會分割每一頁,並將其內容分割成控制器的動作 (商務邏輯)、 資料存取類別 (資料存取) 和檢視表 (標記)。

首先,您必須移轉您的站台的版面配置。類似於在 Web Form 和 ASP 中的主版頁面。NET MVC 版面配置網頁是指定您的站台的版面配置結構的檔案。Web 網頁和 ASP。NET MVC 3 搭配剃刀檢視引擎) 時都使用相同的版面配置子系統,,所以遷移的這個部分應該很容易。在相片藝廊] 網站中,根 _SiteLayout.cshtml 檔案會包含我們網站結構。複製內容,然後瀏覽至您的 ASP。NET MVC 站台。開啟位於 [Views/Shared/_Layout.cshtml] 及 [貼上內容中的 _SiteLayout.cshtml 的版面配置檔。

一旦完成後,您必須對 _Layout.cshtml 進行一些小變更。首先,將連結變更為樣式表 ASP 中的新位置。NET MVC 應用程式 (而不是 ~/Content/Site.css ~ / Styles/Site.css)。第二,您必須將 @Page.Title 變更為 @ ViewBag.Title。兩者都是型別的物件動態可以包含顯示或網站中網頁的其他資料,您可能已經猜到,頁面會使用的 Web 網頁,而 ViewBag 用於 ASP。NET MVC。

您要變更您 _Layout.cshtml 的最後一件事是您應該記住所有您移轉至 ASP 網頁。NET MVC。請注意該 _Layout.cshtml 使用 @ Href 呼叫來插入至頁面的 Url。參考 (指令碼 CSS 等等) 的靜態內容的任何呼叫,如這些能保持不變。您將,不過,要變更所有指向您網站上網頁 @ Href 呼叫。雖然這些能夠也是您在移轉後,它們會指向靜態 Url。在 ASP。NET MVC 它已被視為更好的作法是使用 ASP。NET 路由建立 Url 的檢視會呈現時。結果是更簡潔、 較不 brittle 連結也受限於您路由表定義,而不是硬式編碼在網站上。

因此,您會想要變更任何連結,如下所示:

<div id="banner">
  <p class="site-title">
    <a href="@Href("~/")">Photo Gallery</a>
  </p>
...
</div>

相反地,您會使用 @Url.RouteUrl 或 @ Url.Action:

<div id="banner">
  <p class="site-title">
    <a href="@Url.Action("Default", "Gallery")">Photo Gallery</a>
  </p>
...
</div>

一旦您已移到您網站的配置,就可以開始遷移到檢視的網頁。 如果在 Web 網頁應用程式中,您可以由 RenderPage 呼叫所執行的任何.cshtml 頁面,將那些可能是在 [檢視/共用] 下的全站台網頁或網頁共用的控制站,例如帳戶適當的檢視子資料夾。 每一個呼叫其中一個這些部分網頁的網頁必須更新以反映新的位置。

所有的剩餘網頁應該移動 [檢視],以資料夾組合管理的控制站。 因為您的 Web 網頁的網站並沒有一個控制器的概念,您即將要在移轉期間引入控制站。 好消息是一種控制站結構相片圖庫] 應用程式,可以明顯看出來,並說明您自己的站台的很好的做法。

比方說,相片圖庫範本網站會使用下列資料夾來群組頁面:帳戶、 組件庫、 相片、 標記和使用者。 每個資料夾包含啟用該群組與相關某些功能的網頁。 比方說,[帳戶] 資料夾包含頁面來記錄進出站台和登錄的使用者。 組件庫資料夾包含列出頁面、 加入新的藝廊的網頁和檢視相片藝廊中的網頁組件庫。 剩餘的資料夾會以類似的方式組織。 雖然這種結構並不需要在 Web 網頁的網站,它不會啟用更容易移轉到 ASP。NET MVC。 在這種情況下,每個資料夾到一個控制器和動作,並檢視每個.cshtml 檔案對應得很好。

我們就先來移動帳戶資料夾及它的三個網頁 — 登入、 登出和暫存器,為 ASP。NET MVC 檢視目錄下應用程式。 在 ASP。NET MVC 說法,應用程式中的什麼位置本質您立即變成網頁檢視。 您無法完成時,不過,因為您的應用程式需要的控制器與動作才能傳遞這些檢視給使用者要求時。

可能造成的控制站

您必須在 [檢視] 下的 [帳戶] 資料夾的事實 MVC 慣例,表示您應該有控制器,名為 AccountController,所以我們下一個步驟是建立該資料夾底下的控制站的控制站。 只要以滑鼠右鍵按一下並選取 [新增] |控制站。 我們可以從這個空的控制站建立動作方法將包含現在位於的每一個我們移入我們的應用程式的.cshtml 網頁頂端的邏輯。

我們將 Login.cshtml 第一次,其包含了中的程式碼圖 1

圖 1Login.cshtml 中所包含的商務邏輯

Page.Title = "Login";
if (IsPost) {
  var email = Request["email"];
  if (email.IsEmpty()) {
    ModelState.AddError(
      "email", "You must specify an email address.");
  }
  var password = Request["password"];
  if (password.IsEmpty()) {
    ModelState.AddError(
      "password", "You must specify a password.");
  }

  if (ModelState.IsValid) {
    var rememberMe = Request["rememberMe"].AsBool();
    if (WebSecurity.Login(email, password, rememberMe)) { 
      string returnUrl = Request["returnUrl"];        
      if (!returnUrl.IsEmpty()) {
        Context.RedirectLocal(returnUrl);
      } else{
        Response.Redirect("~/");
      }
    } else {
      ModelState.AddFormError(
        "The email or password provided is incorrect.");
    }
  }
}

請注意有兩種案例在這裡被處理。 第一個是供使用者第一次載入登入頁面時。 在這個案例中,網頁設定它的標題,並直接對標記進行轉換。 第二個案例包含在條件,IsPost,並代表當使用者完成登入表單,並按一下 [登入] 按鈕時執行的邏輯。

在 ASP。NET MVC 我們處理傳遞一個空白表單,藉由在我們的控制器,一個空白表單,另一個處理送出作業中建立兩個動作方法接受表單送出程的序。 第一個動作將設定網頁標題,並傳回登入] 檢視中,而第二個會包含在 IsPost 條件式邏輯。 這些動作都包含在圖 2。 您已經加入這兩種動作之後,刪除 Login.cshtml 標頭程式碼。

圖 2登入控制器的動作

public ActionResult Login() {
  ViewBag.Title = "Login";
  return View();
}

[HttpPost]
public ActionResult Login(string email, string password, 
  bool?
rememberMe, string returnUrl) {
  if (email.IsEmpty())
    ModelState.AddModelError("email", 
      "You must specify an email address.");
  if (password.IsEmpty())
    ModelState.AddModelError("password", 
      "You must specify a password.");
  if (!ModelState.IsValid)
    return View();
  if (WebSecurity.Login(email, password, 
    rememberMe.HasValue ?
rememberMe.Value : false)) {
    if (!string.IsNullOrEmpty(returnUrl))
      return Redirect(returnUrl);
    return RedirectToAction("Default", "Gallery");
  }

  ModelState.AddModelError("_FORM", 
    "The email or password provided is incorrect");
  return View();
}

有一些要注意原始頁面和結果動作方法之間的主要差異。 簡單來說,您會注意到 IsPost 條件式不需要。 在 ASP。NET MVC,我們會建立登入網頁的 post 動作藉由建立第二個的登入動作方法並以 [HttpPost] 屬性裝飾。 我們第一種登入方法現在不執行任何動作超過設定的 ViewBag.Title 屬性,傳回的 ViewResult,然後將稱為 Login.cshtml 的檢視 (帳戶) 的檢視頁面看起來。

您可能會注意到第二件事是我們張貼動作都包含數個參數與要求的所有呼叫這些所用的原始頁面會消失。 藉由將參數放在相對於我們的登入表單 (電子郵件、 密碼及 rememberMe) 中的欄位名稱我們方法上我們可以使用 ASP。NET MVC 預設繫結模型器能夠做為行動,這省了我們從自己呼叫要求物件,讓我們動作邏輯更簡潔的參數傳遞給我們這些項目。

最後,有一些驗證的處理和重新導向中有些微的差異會在 Web 網頁和 ASP 中執行。NET MVC 應用程式。 在我們的 Web 網頁的網站,ModelState.AddError 和。AddFormError 是我們使用來通知頁面我們已經遇到無效的表單資料的呼叫。 在 ASP。NET MVC 應用程式,我們使用 ModelState.AddModelError,也就是僅有些許不同,但您網頁的所有必要的變更。 重新導向,我們網頁網站呼叫 Response.Redirect 時 re-routing 使用者。 在 ASP。NET MVC,因為我們控制器的動作應該會傳回 ActionResult,我們會呼叫傳回的 RedirectToRoute("Default"),會產生相同結果。

一旦我們已移轉的登入網頁,我們可以快速處理 Logout.cshtml。 在 Web 網頁中,某些頁面可能包含邏輯和任何標記如果如同 Logout.cshtml 來執行動作,然後重新導向使用者,其目的在於:

@{
  WebSecurity.Logout();
  Response.Redirect("~/");
}

在 ASP。NET MVC,我們要加入的登出動作,會為我們執行這項工作:

public ActionResult Logout() {
  WebSecurity.Logout();
  return RedirectToAction("Default", "Gallery");
}

因為檢視代表只的視覺化項目網頁以及在任何的功能,而且我們建立了處理登出使用者,並將其重新導向的動作,我們可以從我們的應用程式刪除 [Logout.cshtml] 檢視。

截至目前為止,我們已經轉換成檢視我們帳戶] 頁面,藉由將它們複製到 [檢視/帳戶資料夾、 建立來處理要求我們帳戶] 頁面中,AccountController 和實作動作方法,以便處理登入和登出的案例。 此時,您可以建置和執行網站並將登入帳戶/附加至 [網址] 列中,瀏覽器 (請注意,預設首頁指向組件庫/預設值,而我們還沒有實作沒到,因此它不會顯示) 中。

您會想要處理在這個時候的站台功能的其他項是網站的程式碼,並協助程式已包含在您 Web 網頁的 App_Code 目錄中。 在遷移的開始,您可以移至 ASP 的這整個目錄。NET MVC 應用程式,並將它加入您的專案中。 如果目錄包含任何程式碼檔案 (.cs 或.vb) 您可以將它們放在 App_Code 或其他地方移動它們。 在任一情況,您必須變更每個檔案來編譯,而非內容的建置動作屬性。 如果目錄包含 @ helper 方法宣告的.cshtml 檔案,您可以保留那些並利用它們是在 ASP 中。NET MVC 應用程式。

為您的 Web 網頁的網站的其他部份,您會跟隨類似週期的建立每個檢視資料夾的控制站、 建立的每一頁的動作以及將標頭程式碼從每一頁移到一或多個動作。 在任何時間,您應該有所有的網頁可以清楚地分隔成控制器的動作和檢視表。 不過,仍有 MVC 模式我們尚未討論有關,但在這份文件中的一項:模型。

移轉資料存取到儲存機制的類別

您的程序來記錄每一頁中的商務邏輯和將該邏輯移到一或多個控制器的動作會是相當直接了當,有一個例外:資料存取。 雖然您的網頁部分可能是類似於登入和登出] 頁,包含一些邏輯並且不能資料存取,大部分的 Web 網頁上的網站可能使用資料庫。

[Account/Register.cshtml] 頁面即為一例。 當使用者完成註冊表單,並按一下 [暫存器時,網頁會使兩個資料庫呼叫,所示圖 3

圖 3Register.cshtml 資料庫邏輯

var db = Database.Open("PhotoGallery");
      
var user = db.QuerySingle("SELECT Email FROM 
UserProfiles WHERE LOWER(Email) = LOWER(@0)", email);
       
if (user == null) {      
  db.Execute(
    "INSERT INTO UserProfiles (Email, DisplayName, Bio) 
    VALUES (@0, @1, @2)", email, email, "");

  try {
    WebSecurity.CreateAccount(email, password);
    WebSecurity.Login(email, password);
    Response.Redirect("~/");
  } catch (System.Web.Security.MembershipCreateUserException e) {
    ModelState.AddFormError(e.ToString());
  }
} else {
  ModelState.AddFormError("Email address is already in use.");
}

首先,[暫存器] 頁面會開啟 [相片藝廊資料庫,並傳回 WebMatrix.Data.Database 物件,代表資料庫。 然後此網頁會使用物件來尋找現有的電子郵件地址與使用者所提供的值。 如果地址不存在,會建立新的使用者設定檔資料錄,並使用 WebSecurity 成員資格提供者的使用者建立帳戶。

只要我們已經加入 WebMatrix.Data 的參考,並複製到本機屬性設定為真,我們可以使用此資料庫的邏輯不做任何變更,站台會正常作用。 如您所遷移的中途,這可能是您想要採用戰術步驟使站台功能的方法。

在這份文件,不過,我們會進一步執行動作的步驟,並建立其他物件,包含您資料的存取,就像我們還會做為 ASP。NET MVC 應用程式不是從頭開始。 若要分隔您的控制站和資料存取邏輯達成有許多的模式。 我們將使用儲存機制模式的相片藝廊,並藉由抽象化到儲存機制的類別存取我們的資料,我們可以將此邏輯封裝和最小化影響我們應該選擇新增型式的模型物件或物件關聯對應 (ORM) 系統,如進一步 Entity Framework。

我們會先在我們的應用程式,連同稱為 AccountRepository.cs 的簡單類別中建立一個儲存機制資料夾。 我們可以逐步執行每個資料庫呼叫我們暫存器的動作,並將該邏輯移至我們的儲存機制,如所示圖 4

圖 4AccountRepository

public class AccountRepository {
  readonly Database _database;
  public AccountRepository() {
    database = Database.Open("PhotoGallery");
  }

  public dynamic GetAccountEmail(string email) { 
    return _database.QuerySingle(
      "SELECT Email FROM UserProfiles 
      WHERE LOWER(Email) = LOWER(@0)", email);
  }
 
  public void CreateAccount(string email) {
    _database.Execute(
      "INSERT INTO UserProfiles 
      (Email, DisplayName, Bio) VALUES (@0, @1, @2)", 
      email, email, "");
  }
}

我們 Database.Open 的呼叫加入我們的儲存機制的建構函式,並建立兩個方法,另一個則用於查閱帳戶電子郵件和另一個用來建立帳戶。

請注意 GetAccountEmail 的傳回型別是動態。 WebMatrix.Data,在許多查詢方法會傳回其中一個動態或 IEnumerable <dynamic>,而且沒有您就無法繼續這個練習中為您儲存機制,只要該練習是永續的原因。

新的暫存器方法 — 使用我們 AccountRespository — 所示圖 5

圖 5註冊使用 AccountRepository 的動作

[HttpPost]
public ActionResult Register(string email, string password, 
  string confirmPassword) {

  // Check Parameters (omitted)

  if (!ModelState.IsValid)
    return View();
 
  var db = new AccountRepository();
  var user = db.GetAccountEmail(email);
 
  if (user == null) {
    db.CreateAccount(email);
 
    try {
      WebSecurity.CreateAccount(email, password);
      WebSecurity.Login(email, password);
      return RedirectToAction("Default", "Gallery");
    }
    catch (System.Web.Security.MembershipCreateUserException e) {
      ModelState.AddModelError("_FORM", e.ToString());
    }
  }
  else {
    ModelState.AddModelError("_FORM", 
      "Email address is already in use.");
  }
 
  return View();
}

使用動態的傳回型別是完全可以接受的而且甚至可能明智的作法在移轉期間,往上取得您的網站,而且為成熟 ASP 正在執行。NET MVC 應用程式。 您不需要在 ASP 使用強型別的模型。NET MVC 應用,因此,只要您不需要程式碼導向的資料模型定義,您可以利用這項策略。 控制器邏輯和動態模型 ASP 的檢視。NET MVC 應用程式將會充當一般,有一個例外。

您可能已經注意到在 Web 網頁應用程式中,表單欄位明確地使用標準標記來定義:

<input type="text" />
<input type="submit" />
...

在 ASP。NET MVC 使用表單控制項的慣用的方法是使用 Html helper 方法,例如 Html.TextBox 或 Html.TextBoxFor,因為這些方法使用的模型,傳遞至您的檢視來設定目前的值和處理表單驗證。 如果您想要使用這些協助程式方法在您檢視移轉後,您必須介紹強型別的模型物件,並將移出在您儲存機制,使用動態型別,因為這些 helper 方法不能使用動態的模型。

保留網站的 Url

您網站的 Url 是很重要。 無論您的站台的狀態,許多外部來源取決於您現有的 Url,搜尋引擎、 文件、 通訊、 測試指令碼和類似。 因此這些相依性,您不可以隨意改變您的 Url,也適用於移轉。

請考慮使用 ASP。NET 路由以確保現有 Url 都會加以保留。 ASP。NET 路由召開要求,並符合它以正確的資源,請在我們的狀況下一個控制器和動作。 網頁會使用不同的路由系統比 ASP。NET MVC,因此您需要花一些時間,確保會保留您現有的 Url。

網頁應用程式可以處理的 Url,包含和不含副檔名。 比方說,這兩個這些 Url 解決對相同頁面:

http://mysite/Gallery/Default.cshtml

http://mysite/Gallery/Default

ASP。NET MVC 應用程式,不過,不會處理使用.cshtml 延伸模組的第一個 URL。 使用擴充的情況 Url 整個網站,可確保搜尋引擎和其他相依的站台相同的這種方法可以減少造成的影響到您的網站。 如果,不過,您需要處理具有擴充現有的 Url,您可以在 ASP 中建立路由。NET MVC 應用程式,以確定這些作業不中斷。

例如,假設我們相片圖庫的應用程式的預設路由:

routes.MapRoute(
  "Default", 
  "{controller}/{action}/{id}", 
  new { controller = "Home", 
    action = "Index", id = "" } 
);

若要支援舊版 Url 我們的系統中,我們需要將額外的路由新增到此 Global.asax 檔中定義的上方我們路由表。 以下是一個這類定義的範例:

routes.MapRoute(
  "LegacyUrl",
  "{controller}/{action}.cshtml/{id}",
  new { controller = "Gallery", 
    action = "Default", id = "" }
);

在此路由項目具有.cshtml 副檔名的 Url 處理,和傳送至適當的控制器與動作,假設您現有的 Web 網頁站台結構完全對應到控制站/動作結構上。

在規劃移轉時,請記住您的應用程式可能需要變更預設路由或甚至額外的路由,以支援現有的 Url。如果,不過,您決定要中斷現有的 URL,請務必包含所要處理使用者的永久重新導向動作。

完成

要從 Web 網頁移轉至 ASP 的影響。NET MVC,讓我們看一下之前和之後的相片藝廊網站結構。在圖 6,您會看到 WebMatrix 的 Web 網頁站台的結構在左邊。右邊顯示 asp 已完成移轉之後該網站。NET MVC。請注意結構的差異時,大部分的最終結果會覺得很熟悉。

圖 6之前和之後的應用程式配置

今天,ASP。NET 開發人員有三個架構選項可供選擇:Web Form、 Web 網頁和 ASP。NET MVC。雖然每一個都有其優點,選擇其中一個不會禁止您從運用另一個,或甚至移轉完全有些時候在未來。並為所有三個建置在 ASP 的最上層。NET 中,移動到另一個永遠不應該由於技術問題上預測有。如果您選擇要移動,Web 網頁和 ASP 之間的相似性。NET MVC 可讓您繼續使用技術,例如 NuGet、 剃刀、 Web 部署、 IIS 表達和 SQL 壓縮而不需修改。

如果您建置應用程式使用 Web 網頁和決定移動是很好的作法,您從網頁移轉至 ASP。NET MVC 是最低人事路徑,特別是如果您對某些前端設計決策中您 Web 網頁的網站資料夾中的群組化頁面依功能,使用相對 Url 的所有資源,並將所有的商務邏輯放在每一頁的頂端。當移轉的確實時間時,您會發現,asp 網頁移動。NET MVC 是更為順暢且直接,如預期般。

您可以找到對的技巧和技術使用本文中,加上包含許多功能,在許多連結bit.ly/WebMatrixToMVC

Brandon Satrom 為 Microsoft 資深開發人員編輯運作方式之外奧斯丁,德州。在他部落格userInexperience.com,在播客 DeveloperSmackdown.com ,可以在Twitter 上後面twitter.com/BrandonSatrom

Clark Sell 為 Microsoft 之外資深開發人員編輯運作方式芝加哥。在他部落格csell.net,在播客 DeveloperSmackdown.com ,可以在 Twitter 上後面 twitter.com/csell5

多虧了要對下列技術專家,來檢閱這份文件:Phil HaackErik Porter