2012年12月20日 星期四

MVC Music Store Try & Error --CS0103 訊息 --'Scripts' 不存在於目前內容中

操作單元--「Edit form using Scaffolding」對Album進行增刪修的單元測試
在進入Edit功能時,會出現以下錯誤訊息:
=======================================================

編譯錯誤

描述: 資源編譯無法完成 (錯誤發生於服務要求)。請檢閱下列的特定錯誤詳細資料,並視情況修改您的原始程式碼。

編譯器錯誤訊息: CS0103: 名稱 'Scripts' 不存在於目前內容中

原始程式錯誤:


行 67: 
行 68: @section Scripts {
行 69:     @Scripts.Render("~/bundles/jqueryval")
行 70: }

原始程式檔: d:\MvcTestPrj\MvcTestPrj\Views\StoreManager\Edit.cshtml    行: 69
================================================

解決之道
1.用NuGet安裝「Web Optimization FrameWork」套件

2.參考(Reference)加上System.web.Optimization

3.在Web.conf的「namespace」屬性中,加入
「 <add namespace="System.Web.Optimization" /> 」這一項
 (如果不這樣,就要在各別的view中用 「@import System.Web.Optimization」)

4.在view目錄下的shared下的「_Layout.cshtml」中加入以下片段:
 ===========================================
 @if (IsSectionDefined("scripts"))
{
       @RenderSection("scripts", required: false)
}
===============================================
  (我是把他加在<script src...>....</script>之後)

2012.12.23:
雖然上述沒有出現compile的錯誤,但如果用firebug就知道根本還是找不到
「~/bundles/jqueryval」 ,
所以還是需要以下步驟
step 5.在App_start目錄中加入一個類別 BundleConfig
  內容如下
using System.Web.Optimization;
namespace MvcTestPrj.App_Start
{
    public class BundleConfig
    {
        public static void RegisterBundles(BundleCollection bundles)
        {
            bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
                                   "~/Scripts/jquery.unobtrusive*",
                                   "~/Scripts/jquery.validate*"));

        }
    }
}


step 6  到Global.aspx加入Boundle
 一樣還是要using System.Web.Optimization;
  =============================
      protected void Application_Start()
        {
            BundleConfig.RegisterBundles(BundleTable.Bundles);

                  ...
                 ...
 =========================================
  如此才算真的是功德圓滿了

沒有留言:

張貼留言