2013-07-09 17 views
5

Myślałem, że Html.HiddenFor może używać szablonów takich jak Html.DisplayFor lub Html.EditorFor. Niestety, metoda ta nie akceptuje TemplateName, podobnie jak inne.Rozszerzanie ukrytych szablonów w ASP.NET MVC

Wiem, rozwiązaniem byłoby użycie szablonu DisplayFor/EditorFor z hasłem HiddenFors. Ale chciałbym dowiedzieć się, jak rozszerzyć metodę Html.HiddenFor. Ktoś?

Pozdrowienia

Odpowiedz

5

Wygląda jakbyś błąd przez złej analogii. HiddenFor odpowiada dokładnie znacznikowi <input type="hidden"/>. Podobnie jak TextBoxFor, CheckBoxFor itp. Te metody nie są zaprojektowane do używania szablonów. DisplayFor/EditorFor po drugiej stronie są specjalnie stworzone do użycia z szablonami zdefiniowanymi w projekcie. Dlatego to, o co prosisz, nie jest możliwe od razu po wyjęciu z pudełka.

Jednak zawsze możesz zdefiniować własne przeciążenie dla HiddenFor z dowolnym zestawem parametrów i dowolną logiką, której potrzebujesz.

1

występuje przeciążenie, które akceptują dodatkowy parametr - htmlAttributes. Możesz go użyć do dodania atrybutów do znacznika wyniku.

także drugi sposób jest stworzenie maszynki częściowy widok w jednym z folderów

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

nazwą HiddenInput.cshtml

1

Oto, co możesz zrobić, to utworzyć jako szablonu edytora, bo jak Andre pointed out, HiddenFor jest równoznaczne z metod pomocniczych, takich jak TextBoxFor i CheckboxFor.

Prawdopodobnie będziesz chciał mieć również faktycznego edytora, więc umieść swój prawdziwym edytorem pod numerem ~/Shared/EditorTemplates. Zamierzamy umieścić naszego "ukrytego edytora" pod kontrolerem, na którym chcesz go użyć.

~/Views/ControllerName/EditorTemplates/ModelName.cshtml 

Powiedzmy mamy Person model.

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

Utworzymy częściowy widok.

@Model Person 

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

A potem będziemy udawać, że mamy model, który zawiera Person jako właściwość. Z naszego głównego widoku nazywamy naszego "ukrytego edytora" w ten sposób.

@Model Foo 

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

Łatwy peasy cytryny squeezy. Trochę zdziczałe, ale działa jak urok.

+0

Dzięki za to, jak to zrobić, ale jak już powiedziałem w moim pytaniu, już wiem, że jest to możliwe obejście :-) – float

+0

To nie było dla ciebie @float. Miało to uratować następnego faceta, takiego jak ja, który googlował i uznał ten Q/A za absurdalnie długi czas. – RubberDuck