ASP.NET MVC Framework | страница 21




Листинг 2.7. Страница Index.aspx

><%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master"

>  Inherits="System.Web.Mvc.ViewPage" %>


>

>           runat="server">

>  Home Page

>


>

>          runat="server">

>    <%= Html.Encode(ViewData["Message"]) %>

>   

>      ConnectionString="<%$ ConnectionStrings:ConnectionString %>"

>      SelectCommand="SELECT * FROM [Persons]">

>    <>/asp:SqlDataSource>


>   

>        AutoGenerateColumns="False"

>        DataKeyNames="PersonId" DataSourceID="SqlDataSource1">

>      

>        

>          HeaderText="PersonId" InsertVisible="False"

>          ReadOnly="True" SortExpression="PersonId" />


>       

>          HeaderText="LastName" SortExpression="LastName" />

>       

>          HeaderText="FirstName" SortExpression="FirstName" />

>      

>   

>



Результат обращения к действию >Index контроллера >Home представлен на рис. 2.2. Если, к примеру, включить возможность сортировки в >GridView, после чего щелкнуть по ссылке в заголовке таблицы, то будет отображена ошибка, представленная на рис. 2.3, поскольку MVC Framework не позволяет корректно обработать серверные события.

Очевидно, что указанные ограничения функциональности элементов управления делают подобное использование элементов управления, требующих обработки серверных событий, непригодными для использования в представлениях. Для таких элементов управления стоит рассмотреть методику внедрения полноценных WebForms-страниц в MVC-приложение.

С другой стороны, для элементов, отвечающих только за генерацию разметки, такое использование может быть оправдано.


Внедрение страниц WebForms в MVC-приложения

Чтобы использовать страницу WebForms в MVC-приложении, нет необходимости писать большое количество кода. Поскольку MVC-приложение по сути является ASP.NET-приложением, и при его создании нет препятствий к использованию WebForms, все, что нужно сделать — объяснить системе маршрутизации MVC Framework, что для страниц WebForms эту самую систему маршрутизации использовать не надо. Для этого достаточно добавить в файле Global.asax в метод