문제

WebForms에서는 항상 MasterPage를 사용하여 현재 URL을 기반으로 페이지 제목과 메타 설명을 설정합니다. ASP.NET MVC 프로젝트에 대해 똑같이 할 생각 이었지만 어디서부터 시작 해야할지 잘 모르겠습니다. 정보를 지정하지 않는 경우 일부 기본값으로 컨트롤러 및/또는 작업을 기반으로 제목/설명을 설정할 수있어서 좋을 것입니다. 내가이 일을하는 이유는 내가 한 곳에있는 것을 좋아하기 때문에 실수를 쉽게 찾을 수 있기 때문입니다.

편집하다:
답을 읽고 인터넷 검색을 한 후 XML 파일에서 정보를 얻는 것이 멋질 것이라고 생각했습니다. XML이 다음과 같이 보입니다.

<website title="default title for webpage">
    <controller name="HomeController" title="Default title for home controller"> 
       <action name="Index" title="title for index action" />
    </controller>
</website>

나는 ASP.NET MVC를 처음 접 했으므로 이것을 초기화해야 할 곳이 확실하지 않습니다.

도움이 되었습니까?

해결책 3

그래서 며칠 동안 물건을 시도한 후 나는 XML 파일에서 읽는 사용자 정의 필터를 만드는 것으로 끝났습니다.

코드를 copypastecode.com에 추가했습니다
http://www.copypastecode.com/9797/
http://www.copypastecode.com/9809/
http://www.copypastecode.com/9805/

나는 ASP.NET MVC와 "Real"C# 코딩에서 매우 초보자이므로 이상한 물건이 보이면 용서 해주세요. 누군가가 그것을 최적화하고 싶거나 더 나은 솔루션을 가지고 있다면 자유롭게 답변으로 게시하십시오.

다음으로 시도 할 것은 필터없이 모든 컨트롤러에서 활성화되도록 필터없이 만들 수 있습니다. 그래도 논리를 연결해야 할 곳은 확실하지 않습니다. 누군가 나를 올바른 방향으로 밀어 넣을 수 있다면 알려주세요.

다른 팁

다음 전략을 제안합니다.

모델의 계층 구조를 만듭니다.

abstract class MasterModel
{
    public string PageTitle { get; set; }
}

abstract class HomeBaseModel : MasterModel
{
    PageTitle = "Home";
}

abstract class UsersBaseModel : MasterModel
{
    PageTitle = "Users";
}

/************************************/

class HomeNewsModel : HomeBaseModel
{
    PageTitle = "News";
}

class UsersProfileModel : UsersBaseModel
{
    PageTitle = "Profile";
}

페이지 제목을 보유하는 마스터 모델을 정의하고 컨트롤러의 기본 제목을 보유 할 기본 모델을 만듭니다. 이런 식으로 각 동작에서 제목을 명시 적으로 정의 하거나이 컨트롤러의 기본 제목을 사용하도록 남겨 두십시오.

그런 다음 마스터 뷰에서 한 번만 씁니다.

<title><%= Model.PageTitle %></title>

그리고 끝났습니다.

마스터 페이지 모델에서 해당 데이터를 가져 오면 해당 모델에 합리적인 기본값이 있도록 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top