Генерация кода для представлений не работает при использовании пользовательских классов MVC ViewData

Я ни в коем случае не ленив, но уже на 2 дня опоздал с нашим текущим спринтом в моем первом проекте MVC, поэтому я использовал мастер добавления представлений для создания строго типизированных представлений, но теперь, когда я начал использовать классы ViewData как модели представления, мастер создает поля для ViewDataBase, а не моих производных ViewData.

Я думаю, что производные ViewData создаются фабрикой во время выполнения, и предполагаю, что именно поэтому дизайнер/мастер может дать мне только свойства базового класса, но могу ли я что-нибудь с этим сделать?


person ProfK    schedule 08.07.2010    source источник
comment
Чтобы убедиться, что я правильно понимаю, у вас есть класс ViewDataBase и конкретный класс, скажем, класс CustomerViewData : ViewDataBase. Когда вы используете мастер для создания строго типизированного представления с помощью CustomerViewData, он создает его с помощью ViewDataBase?   -  person Raj Kaimal    schedule 08.07.2010
comment
Вы перекомпилировали перед использованием Add View? Представление создается на основе последней скомпилированной сборки, а не вашего исходного кода.   -  person Craig Stuntz    schedule 08.07.2010
comment
@Craig, сегодня я много раз перекомпилировал.   -  person ProfK    schedule 08.07.2010


Ответы (1)


ПрофК,

Вот что я пробовал (VS 2010, MVC2):

public class ViewDataBase
{
    public int ID { get; set; }
    public string Name { get; set; }
}

public class CustomerViewData : ViewDataBase
{
    public string Address { get; set; }
}

Щелкните правой кнопкой мыши мое действие и создайте строго типизированное представление сведений, используя CustomerViewData. Генерируется следующее:

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<MyApplication.Models.CustomerViewData>" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>Index</title>
    </head>
    <body>
        <fieldset>
            <legend>Fields</legend>

            <div class="display-label">Address</div>
            <div class="display-field"><%: Model.Address %></div>

            <div class="display-label">ID</div>
            <div class="display-field"><%: Model.ID %></div>

            <div class="display-label">Name</div>
            <div class="display-field"><%: Model.Name %></div>

        </fieldset>
        <p>
            <%: Html.ActionLink("Edit", "Edit", new { /* id=Model.PrimaryKey */ }) %> |
            <%: Html.ActionLink("Back to List", "Index") %>
        </p>

    </body>
    </html>
person Raj Kaimal    schedule 08.07.2010