Tworzę aplikację MVC, która aktualnie używa EditorFor do generowania wielu widoków. Cały widok to w zasadzie tylko EditorForModel i działa świetnie. Jednakże doszedłem do jednego małego problemu, na który nie mogę znaleźć rozwiązania, i ważne jest, aby działał tak, jak tego potrzebuję, i to jest podczas próby renderowania EditorFor interfejsu. Wiązania i wszystko to zostało załatwione, ale problem polega na tym, że EditorFor widzi, że jest to interfejs, a domyślnie szablon "Object". Potrzebuję go, aby spojrzeć na interfejs i sprawdzić, czy może znaleźć szablon o tej nazwie, a jeśli nie, potrzebuję go do przeglądania wszystkich obecnych interfejsów, aby sprawdzić, czy pasuje do żadnego z nich. Aby wyjaśnić to prościej spojrzeć na ten przykład:Przesłanianie domyślnego edytoraDo wyboru szablonu w ASP.NET MVC 3 RC
interfejsów:
public interface IAppProvider
{
string Name { get; set; }
}
public interface IAppMusicProvider : IAppProvider
{
int GetPlaylistCount();
} // Yeah, I know, this interface is not smart, but it's only for show.
Gdybym teraz utworzyć widok z Model = "IAppMusicProvider" i uruchom Html.EditorForModel()
, muszę go znaleźć „~ Wyświetleń \ Shared \ EditorTemplates \ IAppProvider.cshtml "-template. Czy jest jakiś prosty sposób, w jaki mogę to osiągnąć?
tak, że działa, ale nie jest to sposób sobie z tym problemem (lub raczej użyłem właściwie atrybut '[DataType]'). Aplikacja, którą tworzę, będzie uruchamiać wtyczki i potrzebuję, aby działała tylko poprzez ustawienie interfejsu i nie zmuszanie wszystkich programistów wtyczek do użytkownika '[DataType (" IAppProvider ")]'. – Alxandr
Spróbuj nazwać szablon tak samo jak interfejs? Jeśli pamiętam, to są tylko dwie opcje. – jfar
To również nie działa, ponieważ szablon musi działać dla wszystkich 'IAppProvider's. Szukam sposobu na przesłonięcie tego domyślnego zachowania, więc jeśli dostarczę interfejs implementujący IAppProvider, użyje szablonu IAppProvider. To prawdopodobnie musi być zakodowane gdzieś w MVC (jakiś komponent, który musi zostać zmieniony, jak możesz to zrobić z ControllerFactory itp.), Ale nie wiem nawet, od czego zacząć. – Alxandr