2013-07-09 3 views
5

Html.DisplayFor 또는 Html.EditorFor과 같은 템플릿을 사용할 수 있다고 생각했습니다. 불행하게도이 메소드는 다른 것들처럼 TemplateName을 허용하지 않습니다.ASP.NET MVC에서 HiddenFor 템플릿을 확장하십시오

내가 알고있는 해결 방법은 HiddenFors가있는 DisplayFor/EditorFor 템플릿을 사용하는 것입니다. 그러나 Html.HiddenFor 방법을 확장하는 방법을 알고 싶습니다. 누군가?

감사

답변

5

보이는 이름을 가진 폴더 중 하나

~/Areas/AreaName/Views/ControllerName/DisplayTemplates/TemplateName.cshtml 
~/Areas/AreaName/Views/Shared/DisplayTemplates/TemplateName.cshtml 
~/Views/ControllerName/DisplayTemplates/TemplateName.cshtml 
~/Views/Shared/DisplayTemplates/TemplateName.cshtml 

에 면도날 부분 뷰를 만드는 것입니다. HiddenFor<input type="hidden"/> 태그와 정확히 일치합니다. TextBoxFor, CheckBoxFor 등등. 이러한 방법은 템플릿을 사용하도록 설계되지 않았습니다. 다른 쪽의 DisplayFor/EditorFor은 특별히 프로젝트에 정의 된 템플릿과 함께 사용하기 위해 만들어졌습니다. 따라서 당신이 요구하는 것은 즉시 사용 가능하지 않습니다.

그러나 매개 변수 집합과 필요한 모든 논리를 사용하여 언제든지 HiddenFor에 대한 고유 한 오버로드를 정의 할 수 있습니다.

1

추가 매개 변수를 허용 과부하가있다 - htmlAttributes가. 그리고 결과 태그에 몇 가지 속성을 추가하는 데 사용할 수 있습니다.

또한 두 번째 방법은 잘못된 비유로 오해하는 것처럼 HiddenInput.cshtml

1

다음은 무엇을, 당신이 때문에 같은 Andre pointed out, HiddenForTextBoxForCheckboxFor 같은 헬퍼 메소드에 해당, 그것은 편집기 템플릿로 만들 수 있습니다.

실제 편집기를 사용하려는 경우 실제 편집기를 ~/Shared/EditorTemplates 아래에 두십시오. 우리는 당신이 그것을 사용하고자하는 컨트롤러 아래에 "숨겨진 편집기"를 넣을 것입니다.

~/Views/ControllerName/EditorTemplates/ModelName.cshtml 

Person 모델이 있습니다.

public class Person 
{ 
    public string First { get; set; } 
    public string Last { get; set; } 
} 

부분보기를 만듭니다.

@Model Person 

@Html.HiddenFor(p => p.First); 
@Html.HiddenFor(p => p.Last); 

그리고 우리는 척 것이다 우리는 속성으로 Person을 포함하는 모델을 가지고있다. 우리의 주요 관점에서, 우리는 "숨겨진 편집장"을 이렇게 부릅니다.

@Model Foo 

@Html.EditorFor(f => f.Person) 

Easy peasy lemon squeezy. 약간 해키지만 매력처럼 작동합니다.

+0

고마워요.하지만 내 질문에 말했듯이, 이미 이것이 가능한 해결 방법이라고 알고 있습니다. :-) – float

+0

이것은 당신을위한 것이 아닙니다. 이것은 googles 나 Q/A의 터무니없는 양의 시간을 찾은 나 같은 다음 사람을 구하기위한 것이 었습니다. – RubberDuck