예를 들어 설명한 것처럼 ASP.NET MVC 응용 프로그램에서 장치 관련보기를 구현하려고합니다. 여기 : https://www.simple-talk.com/dotnet/asp-net/multiple-views-and-displaymode-providers-in-asp-net-mvc-4/ 또는 여기 : https://docs.microsoft.com/en-us/aspnet/mvc/overview/older-versions/aspnet-mvc-4-mobile-features컨트롤러 동작에 뷰 경로가 포함되어있을 때 DisplayMode가 모바일보기로 변경되지 않습니다.
위 ASP.NET MVC4에 맞도록하는 기사가, 그 내용은 프레임 워크의 이후 버전에 대한 관련 (내 애플 리케이션 ASP.NET MVC 5.2을 사용하고 있습니다)하지만.
문제가 발생했습니다.
public class TestController: Controller
{
public ActionResult Test()
{
return View(new TestModel());
}
public ActionResult Test2()
{
return View("~/Views/Test/Test.cshtml", new TestModel());
}
}
테스트 모델은 정말 기본입니다 : 나는 다음과 같은 컨트롤러가
public class TestModel
{
public string TheDate
{
get
{
return DateTime.Now.ToString();
}
}
}
을 그리고 나는 "/ 테스트 ~/조회"폴더에 두 개의 전망이 :
Test.cshtml
@model MyNamespace.Models.TestModel
<!DOCTYPE html>
<html>
<head><title></title></head>
<body>
<h1>This is the desktop view</h1>
<p>model data: @Model.TheDate</p>
</body>
</html>
Test.Mobile.cshtml
,@model MyNamespace.Models.TestModel
<!DOCTYPE html>
<html>
<head><title></title></head>
<body>
<h1>This is the mobile view</h1>
<p>model data: @Model.TheDate</p>
</body>
</html>
위의 링크에서 설명한 해결책을 구현했습니다.
/test/test를 묻는 메시지가 표시되면 데스크탑 뷰어에서 요청할 때 Test.cshtml을, 모바일 에뮬레이터에서 요청할 때는 Test.Mobile.cshtml을 볼 수 있습니다. 그러나/test/test2를 요청할 때마다 데스크탑보기가 항상 표시됩니다.
내 문제에 대한 해결책을 찾았지만 모든 사람이 동일한 시나리오 (예 : "/ test/test"시나리오)를 반복적으로 재현하는 것으로 보이며 아무도 "/ test/test2 "시나리오. 해당 기능을 재정의 할 수 있습니까? 기본 면도기/MVC 기능을 무시하고 손을 더럽힐 까봐 두려워하지 않지만 어디서부터 시작해야할지 정말 모르겠습니다.
도움을 주시면 감사하겠습니다.
컨트롤러의 코드베이스에 손을 대지 않기를 바랬습니다. 또한, DisplayMode 솔루션만큼 일반적이지는 않습니다. "태블릿"모드, "LegacyPhone"모드 등을 사용하려면 어떻게해야합니까? 이러한 유형의 작업에 대한 return 문은 매우 귀찮은 일입니다. – Yiangos
보다 일반적인 솔루션으로 base.FindView 메서드를 사용하여 RazorViewEngine 클래스를 상속하고 특정 뷰에 대해 원하는 경로를 설정하여 사용자 지정 뷰 엔진을 만들 수 있습니다. 이렇게하면 모든 장치 검사가 한 곳에서 이루어집니다. –
그 중 하나는 적절하지 않습니다. 내 문제는 반환 된 View 개체에 이미 생성자 인수에 선언 된 뷰 경로가있는 경우입니다. 이 경우 FindView 메서드가 호출되지 않는다는 것을 이해할 수 있습니다. 엔진은 이미 뷰를 검색 할 위치를 알고 있습니다.그러나 내가 전화를 받았는지 확인하려고 노력할 것입니다. 만약 그렇다면, 거기에 장치 탐지 로직을 심어 놓을 것입니다. 나는 결과에 대해 알려줄 것이지만, 나는 지금 약간 비관적이다. – Yiangos