Представление действий контроллера ASP.NET StrongTyped<TView,TMode>(данные TModel)
-
19-09-2019 - |
Вопрос
Я использую 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 и сделать это самостоятельно или связаться с первоначальным автором. Дэвид Эббо, чтобы предложить функцию для добавления.