Global.asa.csにApplication変数を設定します:
protected void Application_Start()
{
...
// load all application settings
Application["LICENSE_NAME"] = "asdf";
}
そして、次のように私のカミソリビューでアクセスしてみてください:
@Application["LICENSE_NAME"]
このエラーが発生します:
Compiler Error Message: CS0103: The name 'Application' does not exist in the current context
適切な構文は何ですか?
ビューはどこからでもデータをプルすることを想定していません。コントローラアクションからビューモデルの形式で渡されたデータを使用することになっています。したがって、ビューでそのようなデータを使用する必要がある場合、適切な方法はビューモデルを定義することです。
public class MyViewModel
{
public string LicenseName { get; set; }
}
コントローラーアクションにデータを入力する必要がある場所から入力します(懸念事項をより適切に分離するには、リポジトリを使用します)。
public ActionResult Index()
{
var model = new MyViewModel
{
LicenseName = HttpContext.Application["LICENSE_NAME"] as string
};
return View(model);
}
最後に、強く型付けされたビューにこの情報をユーザーに表示させます。
<div>@Model.LicenseName</div>
それが正しいMVCパターンであり、その方法です。
今日はアプリケーション状態であり、明日はforeach
ループであり、来週はLINQクエリであり、すぐにビューにSQLクエリを書くことになります。
@HttpContext.Current.Application["someindex"]
自動的に生成された ApplicationInstance
property を使用して、現在のアプリケーションを取得できます。
@ApplicationInstance.Application["LICENSE_NAME"]
ただし、このロジックはビューに属していません。
HttpContext.Current.Application[]
を介してこれにアクセスできる必要がありますが、MVCのベストプラクティスでは、おそらくこれをビューモデルに渡すことを検討する必要があると述べています。
上記で回答した@ Darin-Dimitrovパターンに基づいて、モデルを部分ビューに渡し、_Layoutページにロードしました。
Application Loadの外部リソースからWebページを読み込む必要がありました。これは、複数のサイトにわたるヘッダーナビゲーションとして使用されます。これは私のGlobal.asax.csにあります
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
Application["HeaderNav"] = GetHtmlPage("https://site.com/HeaderNav.html");
}
static string GetHtmlPage(string strURL)
{
string strResult;
var objRequest = HttpWebRequest.Create(strURL);
var objResponse = objRequest.GetResponse();
using (var sr = new StreamReader(objResponse.GetResponseStream()))
{
strResult = sr.ReadToEnd();
sr.Close();
}
return strResult;
}
部分ビューのコントローラーアクションを次に示します。
public class ProfileController : BaseController
{
public ActionResult HeaderNav()
{
var model = new Models.HeaderModel
{
NavigationHtml = HttpContext.Application["HeaderNav"] as string
};
return PartialView("_Header", model);
}
}
このように_Layoutページに部分ビューをロードしました。
<div id="header">
@{Html.RenderAction("HeaderNav", "Profile");}
</div>
部分ビュー_Header.cshtmlは非常にシンプルで、アプリケーション変数からhtmlをロードするだけです。
@model Models.HeaderModel
@MvcHtmlString.Create(Model.NavigationHtml)
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
var e = "Hello";
Application["value"] = e;
}
@ HttpContext.Current.Application ["value"]