首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

ASP.NET MVC4 Scaffold 視圖:模型更新後視圖不會自動同步,這是設計使然

     編輯:程式設計綜合問答

直接回答

視圖不會自動更新。 Scaffold(腳手架)生成的 Create/Edit/Details/Delete/Index 視圖屬於**一次性生成的程式碼**,而非與模型綁定的即時模板。

為什麼不自動同步?

  • 保護前端投入:實際專案中視圖會被設計師/前端工程師大幅客製化(CSS、JS、版面調整),若模型一改就覆蓋,所有前端工作將付諸東流。
  • 單向生成:Scaffold 只是「根據當前模型快照生成基礎 CRUD 程式碼」,生成後與模型解耦。
  • 版本控管:視圖程式碼納入 Git,團隊協作時需可追蹤、可審查的變更歷史。

正確工作流程

  1. 修改模型(如新增 `Birthday` 屬性)。
  2. 執行資料庫遷移(Code First Migrations):
    `Add-Migration AddBirthday` → `Update-Database`。
  3. 手動更新視圖:在對應 `.cshtml` 中新增欄位標籤,或重新 Scaffold 到**暫存資料夾**再手工合併差異。
  4. 若欄位眾多,可撰寫 T4 模板或使用第三方工具(如 MvcScaffolding 擴充)輔助批次更新。

手動更新視圖範例(新增 Birthday)

@* Create.cshtml *@
<div class="form-group">
    @Html.LabelFor(m => m.Birthday, new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.EditorFor(m => m.Birthday, new { htmlAttributes = new { @class = "form-control", type = "date" } })
        @Html.ValidationMessageFor(m => m.Birthday, "", new { @class = "text-danger" })
    </div>
</div>

對比:Razor Pages / Blazor / ASP.NET Core MVC

框架視圖與模型關係更新方式
ASP.NET MVC 4/5 (Scaffold)一次性生成,獨立檔案手動修改
ASP.NET Core MVC (Tag Helpers)同樣一次性生成手動修改,但 Tag Helper 減少樣板碼
Razor PagesPageModel 與 .cshtml 緊耦合修改 PageModel 屬性,視圖 IntelliSense 即時提示
Blazor元件化,模型即 C# 類別重新編譯即同步,無視圖檔案分離問題

總結

Scaffold 視圖**不會**隨模型自動更新,這是為了保護前端客製化成果。開發者應將「模型變更 → 遷移資料庫 → 手動同步視圖」納入標準開發流程,或改用 Razor Pages/Blazor 等更現代的框架以獲得更緊密的模型-視圖同步體驗。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved