ASP의 "보기/공유" 폴더에 하위 디렉토리를 추가하는 중입니다.Net MVC 및 보기 호출
저는 현재 ASP를 이용하여 사이트를 개발하고 있습니다.네트 MVC3(레이저 포함)."보기/공유" 폴더 안에 "부분"이라는 하위 폴더를 추가하여 사이트를 더 잘 구성하기 위해 부분 보기를 모두 배치할 수 있습니다.
(레이저 사용) 보기를 호출할 때 항상 "부분" 폴더를 참조하면 문제 없이 이 작업을 수행할 수 있습니다.
@Html.Partial("Partials/{ViewName}")
제 질문은 "부분" 폴더를 목록에 추가할 수 있는 방법이 있는지 여부입니다.보기를 검색할 때 Net이 통과하므로 다음과 같이 "부분" 폴더를 참조할 필요 없이 내 보기를 호출할 수 있습니다.
@Html.Partial("{ViewName}")
도와주셔서 감사합니다!
해결했습니다.다음을 사용하여 레이저에서 부분 보기를 찾을 때 검색한 위치 목록에 "공유/부분" 하위 디렉터리를 추가하려면:
@Html.Partial("{NameOfView}")
먼저 RazorViewEngine을 기본 클래스로 사용하여 뷰 엔진을 만들고 다음과 같이 뷰 위치를 추가합니다.다시 말씀드리지만, MVC에서 만든 기본 "Views/Shared" 디렉토리 내에 만든 "Partials" 하위 디렉토리에 모든 부분 보기를 저장하고 싶었습니다.
public class RDDBViewEngine : RazorViewEngine
{
private static readonly string[] NewPartialViewFormats =
{
"~/Views/{1}/Partials/{0}.cshtml",
"~/Views/Shared/Partials/{0}.cshtml"
};
public RDDBViewEngine()
{
base.PartialViewLocationFormats = base.PartialViewLocationFormats.Union(NewPartialViewFormats).ToArray();
}
}
위치 형식의 {1}은(는) 컨트롤러 이름이고 {0}은(는) 보기 이름입니다.
그런 다음 해당 보기 엔진을 MVC 보기 엔진에 추가합니다.global.asax의 Application_Start() 메서드에 있는 엔진 컬렉션:
ViewEngines.Engines.Add(new RDDBViewEngine());
답변 감사합니다.이렇게 하면 공유 폴더가 구성되지만 새로운 유형의 보기 엔진을 만드는 이유는 무엇입니까?방금 새로 만들었어요.RazorViewEngine
세트 잇츠PartialViewLocationFormats
그리고 그것을 목록에 추가했습니다.ViewEngines
.
ViewEngines.Engines.Add(new RazorViewEngine
{
PartialViewLocationFormats = new string[]
{
"~/Views/{1}/Partials/{0}.cshtml",
"~/Views/Shared/Partials/{0}.cshtml"
}
});
보기 엔진을 사용자 지정하는 것은 좋지만, 하위 폴더 부분만 사용하려면 그렇게 많이 필요하지 않습니다.
레이아웃 보기에 대해 수행된 것처럼 부분 보기에 대한 전체 경로를 사용합니다.
@Html.Partial("/Views/Shared/Partial/myPartial.cshtml")
누군가에게 도움이 되길...
ASP에서 이 작업을 수행하는 경우.NET Core, 간단히 시작 클래스로 이동, 아래ConfigureServices
메소드, 그리고 put
services.AddMvc()
.AddRazorOptions(opt => {
opt.ViewLocationFormats.Add("/Views/{1}/Partials/{0}.cshtml");
opt.ViewLocationFormats.Add("/Views/Shared/Partials/{0}.cshtml");
});
다음 영역을 포함하도록 Lamarant의 훌륭한 답변을 업데이트했습니다.
public class RDDBViewEngine : RazorViewEngine
{
private static readonly string[] NewPartialViewFormats =
{
"~/Views/{1}/Partials/{0}.cshtml",
"~/Views/Shared/Partials/{0}.cshtml"
};
private static List<string> AreaRegistrations;
public RDDBViewEngine()
{
AreaRegistrations = new List<string>();
BuildAreaRegistrations();
base.PartialViewLocationFormats = base.PartialViewLocationFormats.Union(NewPartialViewFormats).ToArray();
base.PartialViewLocationFormats = base.PartialViewLocationFormats.Union(areaRegistrations).ToArray();
}
private static void BuildAreaRegistrations()
{
string[] areaNames = RouteTable.Routes.OfType<Route>()
.Where(d => d.DataTokens != null && d.DataTokens.ContainsKey("area"))
.Select(r => r.DataTokens["area"].ToString()).ToArray();
foreach (string areaName in areaNames)
{
AreaRegistrations.Add("~/Areas/" + areaName + "/Views/Shared/Partials/{0}.cshtml");
AreaRegistrations.Add("~/Areas/" + areaName + "/Views/{1}/Partials/{0}.cshtml");
}
}
}
그런 다음 애플리케이션 시작에 다음을 포함하는 것을 잊지 마십시오.
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
...
ViewEngines.Engines.Add(new RDDBViewEngine());
}
}
등록된 RazorView Engine의 부분 뷰 위치 형식을 업데이트할 수도 있습니다.아래 코드를 Application_Start in Global.asax에 넣습니다.
RazorViewEngine razorEngine = ViewEngines.Engines.OfType<RazorViewEngine>().FirstOrDefault();
if (razorEngine != null)
{
string[] newPartialViewFormats = new[] {
"~/Views/{1}/Partials/{0}.cshtml",
"~/Views/Shared/Partials/{0}.cshtml"
};
razorEngine.PartialViewLocationFormats =
razorEngine.PartialViewLocationFormats.Union(newPartialViewFormats).ToArray();
}
사용 중인 뷰 엔진(웹 양식/레이저)에서 파생된 고유한 뷰 엔진 등록을 작성하고 생성자에서 원하는 위치를 지정하거나 이미 존재하는 위치 목록에 추가할 수 있습니다.
this.PartialViewLocationFormats = viewLocations;
뷰 과 같이 합니다.ViewEngines.Engines.Add(new MyViewEngineWithPartialPath());
언급URL : https://stackoverflow.com/questions/4973000/adding-sub-directory-to-view-shared-folder-in-asp-net-mvc-and-calling-the-view
'source' 카테고리의 다른 글
PHP에서 객체 요소를 배열에 추가하려면 어떻게 해야 합니까? (0) | 2023.08.17 |
---|---|
변수가 정의되지 않은 동안 - 대기 (0) | 2023.08.17 |
Android 단편 및 애니메이션 (0) | 2023.08.17 |
Swift의 userInfo에서 키보드 크기 가져오기 (0) | 2023.08.17 |
판다 데이터 프레임 인덱스에 값이 있는지 확인합니다. (0) | 2023.08.17 |