ASP.NET StrongTyped Вид действия контроллера - <TView, TModel> (Данные TModel) - PullRequest
0 голосов
/ 24 августа 2009

Я использую Asp.net MVC 1, и мне бы очень хотелось, чтобы действия моего контроллера использовали вызовы StronglyTyped View (data), которые обеспечивают проверку типов во время компиляции, и все же позволяют мне использовать страницы aspx в движке представления по умолчанию. ViewPages, которые я вызываю, строго типизированы, но ошибки в вызове действия View (data) не могут быть обнаружены во время компиляции, потому что встроенный метод Controller View (data) не является строго типизированным и даже не проверяет, чтобы видеть если страница существует во время компиляции.

Я реализовал частичное решение (код ниже), используя этот пост , но (1) я не могу заставить функцию общего вида распознавать тип страниц с сильным просмотром если я не создаю код для строго типизированного представления, и (2) Intellisense и рефакторинг не будут работать должным образом с этим методом, что заставляет меня сомневаться в надежности метода, который я использую.

Вопрос: Есть ли лучший способ получить принудительное приведение типов при вызове Views из действий?

Альтернатива: Есть ли альтернативный метод, в котором мой метод действия может создать экземпляр страницы просмотра, напрямую установить некоторые свойства и затем отобразить его HTML в ответе действия?

Код: Вот базовый класс, от которого унаследованы все мои контроллеры, чтобы достичь того, что я имею до сих пор:

 public class StrongController : Controller 
    {

        protected ActionResult View<TView, TModel>(TModel model)
            where TView : ViewPage<TModel>
            where TModel : class
        {
            return View(typeof(TView).Name, model);
        }


    }

А вот пример используемого контроллера: namespace ExampleMVCApp.Controllers {

    public class HomeController : StrongController 
    {

        public ActionResult Index()
        {
            return View<ExampleMVCApp.Views.Home.Index, ExampleData>(new ExampleData());
        }


    }
}

Код ViewPage, необходимый для распознавания типов ... Не работает заголовок Aspx

namespace ExampleMVCApp.Views.Home
{
    public class Issue : System.Web.Mvc.ViewPage<ExampleData>
    {
    }

}

1 Ответ

0 голосов
/ 24 августа 2009

Я думаю, вы должны дать помощникам T4MVC вращение (одно из оригинальных объявлений здесь ). Это, по крайней мере, позволит вам избавиться от кода, который у вас уже есть, поскольку эти шаблоны генерируют код на основе уже имеющихся у вас представлений, и вы используете эти «поддельные» вызовы методов для обращения к своим представлениям.

Для того, чтобы ваши звонки на View были строго набраны для конкретной модели, объявленной вашим представлением, я не совсем уверен, помогают ли вам эти помощники в этом (хотя я подозреваю, что они делают). Однако, если они этого не делают, вы все равно можете взломать код T4MVC, чтобы сделать это самостоятельно, или связаться с первоначальным автором, David Ebbo , чтобы предложить эту функцию для добавления.

...