2013-06-24 8 views
17

보기에서 정적 클래스의 정적 변수를 사용할 수없는 이유는 무엇입니까?면도기에서 정적 변수 사용

public static class GlobalVariables 
{ 
    public static string SystemColor 
    { 
     get { return Properties.Settings.Default.SystemColor; } 
    } 
} 

왜 당신이보기에 전화를 할 수 없을 것입니다 :

예를 들어, 당신은 설정 클래스가 있다고 가정 할 수 있습니다? 그래서

@using AppName.Models 
<html> 
<div ><h1 style="color:@GlobalVariables.SystemColor">System Color</h1></div> 
</html> 

답변

10

지금까지 내가 알고 있어요으로 같은

, 당신은 은 ASP.NET MVC에서 뷰 내부에서 액세스 정적 변수는 적절한 using 문을 사용하여 클래스의 네임 스페이스를 포함 할 수있는 경우 :

@using WhateverNamespaceGlobalVariablesIsIn 

더 중요한 것은, 뷰에서 정적 변수에 직접 액세스하면 안됩니다.

public ActionResult MyAction() 
{ 
    var model = new MyViewModel(); 
    model.SystemColor = GlobalVariables.SystemColor; 
    ... 
    return View(model); 
} 

보기 : 당신이 당신의 레이아웃 파일에서이 작업을 수행해야하는 경우

@model MyViewModel 

<div> 
    <h1 style="color:@(Model.SystemColor)">System Color</h1> 
</div> 

, 사용할 수있는 MVC 패턴을 유지, 귀하의 뷰의 모든 데이터는 뷰 모델에 액세스 할 수 있어야합니다 RenderAction 컨트롤러 동작을 호출하고 대신 부분 뷰를 반환합니다. 부분을 ​​MyViewModel으로 입력하면 위와 같이 사용할 수 있습니다.

+0

MVC 패턴을 준수해야하므로 그렇게해서는 안됩니까? 그 주된 이유는 무엇입니까? – ChaoticLoki

+0

필자가 아는 한, 클래스의 네임 스페이스에'@ using'을 포함하면 뷰에서 정적 변수를 사용할 수 있습니다. 그래도 안된다. –

+0

좋아요, 그 말이 맞습니다. 저는 뷰 모델을 전달하지 않을 때에도 모든 것에 대한 뷰 모델을 만들어야하고 싶지 않았습니다. 예를 들어 고객 모델 목록을 통과 한 고객 목록이 있습니다. – ChaoticLoki

7

글로벌 클래스는

public class GlobalVariables 
{ 
    public static string SystemColor 
    { 
     get { return Properties.Settings.Default.SystemColor; } 
    } 
} 

같아야 페이지에 프로그램 응용 .GlobalVariables.SystemColor APPNAME @ 당신은 정적 변수에 액세스 할 수

@using AppName.Models 
<html> 
<div ><h1 style="color:@AppName.GlobalVariables.SystemColor">System Color</h1></div> 
</html> 
</p> 
+0

이것은 대답이어야합니다. 간단하고 요점. –

5

글로벌 클래스의 네임 스페이스로 대체 보기. 이 작업을 수행하는 세 가지 방법이 있습니다 :

1) Ant P에서 제안하는 것처럼, using 문을보기에 포함시킵니다. GlobalVariables 클래스의 네임 스페이스 AppName.GlobalVariables 것을 감안할 때 :

@using AppName.GlobalVariables 
<html> 
    <div ><h1 style="color:@GlobalVariables.SystemColor">System Color</h1></div> 
</html> 

2) 또 다른 방법은 사용자가 액세스 할 위치를 직접 줄에 네임 스페이스를 사용하는 것입니다 변수 :

<div ><h1 style="color:@AppName.GlobalVariables.SystemColor">System Color</h1></div> 

3) 마지막으로 Views 폴더의 web.config 파일에 필요한 네임 스페이스를 추가 할 수 있습니다.

(가) 모델에서 변수를 고집하고 거기에서보기에 전달에 관해서는
<system.web.webPages.razor> 
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
    <pages pageBaseType="System.Web.Mvc.WebViewPage"> 
    <namespaces> 
     <add namespace="System.Web.Mvc" /> 
     <add namespace="System.Web.Mvc.Ajax" /> 
     <add namespace="System.Web.Mvc.Html" /> 
     <add namespace="System.Web.Routing" /> 
     <add namespace="System.Web.Optimization" /> 
     <add namespace="AppName.GlobalVariables" /> 
    </namespaces> 
    </pages> 
</system.web.webPages.razor> 

는 ... 참으로 그것은 MVC 패턴을 준수하고 관심과 모든 선 (善)의 분리를 보장합니다. 그러나 제 의견으로는 어떤 경우에는 "패턴을 고수하고 있습니다"는 말도 안된다. 귀하의 경우에는보기에서이 변수에 액세스 할 수 있습니다.