Представление действий контроллера ASP.NET StrongTyped<TView,TMode>(данные TModel)

StackOverflow https://stackoverflow.com/questions/1321082

Вопрос

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

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

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

Альтернатива: Существует ли альтернативный метод, при котором мой метод действия может создать экземпляр страницы просмотра, напрямую установить некоторые свойства, а затем визуализировать его 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>
    {
    }

}
Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top