2019年7月10日 星期三

名稱'ViewBag' 不存在於目前的內容中


已經忘了是從什麼時候專案裡cshtml的@ViewBag下面都跑出了擾人紅色毛毛蟲,包含連@Url, @Style, @Script 等都有出現,雖然在執行、發佈上是完全沒有任何問題,但在coding的時候還是會造成麻煩,所以決定一定要把它給處理掉。
上網搜尋了幾個方法,找到了幾個方向

1.View/Web.config修正













如果從空白專案開始,有可能會少了View/Web.config這個檔案
但我原本的web.config就好好的,所以…無效!!

2.刪除快取

將C:\Users\your.name.here\AppData\Local\Microsoft\VisualStudio\14.0\ComponentModelCache 底下的文件刪除,再重啟vs

 把快取刪掉再重新產生,感覺蠻有機會 應該是快取錯亂才找不到ViewBag吧。
 但實驗結果…失敗,毛毛蟲依舊存在

3.Resetting user data

這動作會需要重新登入microsoft帳號
執行以下指令
devenv.exe /resetuserdata
 並刪除.vs 資料夾

結果…還是一樣!!(怒

4. webconfig 版號確認

我有另一個專案是用mvc5, 就沒這個問題,
所以我把這個專案從mvc4 更新到mvc5,但還是一樣有毛毛

在思考會不會是版本的引用上面有錯誤,

後來發現原來是webpage:version的值之前被我改到,拿去做其它用途,
但它原來是會驗證元件版本的key,改回原本版號就ok了






繞了一圈,結果還是回到web.config上
上了一課,不知道的key還是不要亂動~>"<


參考
stackoverflow
stevefenton

2019年7月5日 星期五

MVC如何新建 BundleConfig

在空白專案裡新增BundleConfig

1.安裝Nuget Package Microsoft.AspNet.Web.Optimization到專案裡
開啟 工具>NuGet套件管理員>套件管理器主控台
輸入 Install-Package Microsoft.AspNet.Web.Optimization

2.新增BundleConfig.cs檔
在APP_Start裡新增BundleConfig.cs,並加入以下內容
using System.Web;
using System.Web.Optimization;

namespace yourprojectname
{
    public class BundleConfig
    {
        public static void RegisterBundles(BundleCollection bundles)
        {
            bundles.Add(new ScriptBundle("~/bundles/jquery").Include("~/Scripts/jquery-{version}.js"));
            bundles.Add(new ScriptBundle("~/bundles/jqueryui").Include("~/Scripts/jquery-ui-{version}.js"));
            bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include("~/Scripts/jquery.unobtrusive*", "~/Scripts/jquery.validate*"));
            bundles.Add(new ScriptBundle("~/bundles/modernizr").Include("~/Scripts/modernizr-*"));
        }
    }
}

3.修改Global.asax,加入以下內容
using System.Web.Optimization;

void Application_Start(object sender, EventArgs e)
{
    ...
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

4.修改在專案web.config跟views資料夾下的web.config
加入命名空間
namespace="System.Web.Optimization"

5.在cshtml檔裡 render bundle,開始使用bundle打包的功能
@Scripts.Render("~/bundles/jquery"")
@Scripts.Render("~/bundles/jqueryval"")


參考
stackoverflow.com
aspnetmars.blogspot.com

使用MVC Bundle後,CSS參考的相對路徑不對了??

MVC Bundle相當好用,可以把一堆css, js包在一起 bundles.Add(new StyleBundle("~/css/main").Include( "~/Content/Layout/main.css", ...