답변:
@helper Razor 지시문을 사용할 수 있습니다.
@helper WelcomeMessage(string username)
{
<p>Welcome, @username.</p>
}
그런 다음 다음과 같이 호출하십시오.
@WelcomeMessage("John Smith")
왜 cshtml 파일 안에 그 함수를 선언하지 않습니까?
@functions{
public string GetSomeString(){
return string.Empty;
}
}
<h2>index</h2>
@GetSomeString()
functions
솔루션은 반환 유형에 더 많은 유연성을 제공합니다. 두 가지 답변 모두 유용한 정보이지만 유용한 정보이므로 내 책에서 +1을 얻습니다.
<p>Welcome, @username.</p>
대 return new HtmlString("<p>Welcome, " + Html.Encode(username) + ".</p>");
.
@helper
단일 뷰에서 사용한다고해서 다른 뷰에서 사용할 수는 없습니다. @helper를 더 좋아하는 이유는 중괄호 사이에 html을 넣을 수 있기 때문입니다. @functions
(쉽게) 그렇게 할 수 없습니다.
@helper
와 @functions
많은 전망을 공유 할 수 있고, 둘 다에 선언 된 단일 뷰에서 사용할 수있는 (그리고 나는 개인적으로 모두 공유 / 하나의 시나리오에서 그들을 위해 사용을 발견했다). 그들 사이의 실질적인 차이점은 뷰 헬퍼가 렌더링 된 HTML 스 니펫 (또는 더 적절한 HelperResult
인스턴스) 을 반환하기 위해 구문 설탕을 추가 하는 반면 뷰 함수는 일반적 으로 간단한 참조 또는 값 유형을 반환하는 데만 유용하다는 것입니다.
메소드가 HTML을 반환 할 필요가 없으며 다른 작업을 수행 해야하는 경우 Razor에서 도우미 메소드 대신 람다를 사용할 수 있습니다
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
Func<int,int,int> Sum = (a, b) => a + b;
}
<h2>Index</h2>
@Sum(3,4)
선언적 면도기 도우미 살펴보기
페이지의 전역 변수에 액세스하려면 다음을 수행하십시오.
@{
ViewData["Title"] = "Home Page";
var LoadingButtons = Model.ToDictionary(person => person, person => false);
string GetLoadingState (string person) => LoadingButtons[person] ? "is-loading" : string.Empty;
}
GetLoadingState()
여기에 로컬 기능이 있습니다.
@functions
메소드 안에 태그를 넣을 수 없으므로이 답변이 마음에 듭니다.