MVC3 .NET Несколько модели или модели единого представления

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

Вопрос

Я хочу создать веб -страницу с 3 вкладками (и, следовательно, 3 DOV): вкладка 1 - Обновите вкладку личных данных 2 - Проверьте вкладку Заказа 3 - Изменить сведения о входе в систему

Насколько я могу судить, есть 2 способа реализовать это, но я хотел бы узнать лучшую практику.

Во -первых, было бы иметь 3 частичных представления, которые реализуют отдельную модель каждую секунду, - это иметь 3 частичных представления, которые реализуют один вид просмотра

Первый вариант, если использование частичных представлений приведет к ошибке «Ожидайте модели A, но получила модель B», я считаю, что вы можете использовать рендерингация, чтобы обойти это, но это лучшая практика?

Мнения приветствуются.

Спасибо

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

Решение

Глядя на имена вкладок «Обновление личных данных», «проверьте заказ» и «сведения в систему входа» - кажется, что они довольно разные, но связанные варианты, которые может сделать пользователь.

Для меня было бы смысл разделить их на три разных действия с тремя разными взглядами, что означает, что вы только представляете действие для видимой вкладки. Таким образом, если пользователь только хотел, скажем, обновить свои данные, сервер не выполняет запросы DB, чтобы проверить заказ

Вы бы использовали несколько CSS, чтобы стилизовать его так, чтобы он выглядел как три вкладки, но каждая вкладка действительно была бы ссылкой, которая выполняла новый запрос, просто заставляя ее выглядеть так, как будто было три вкладка.

например

<div id="content">
    <ul>
       <li class="active">Update Personal Details</li>
       <li>@Html.ActionLink("Check Order","CheckOrder")</li>
       <li>@Html.ActionLink("Update Logon Details","UpdateLogonDetails")</li>
    </ul>
    <div id="tab1" />
     ... Update Personal Details Tab... etc
    </div>
    ... tab2 and tab 3 not included...
</div>

Действия для контроля и UpdateLogondetails будут делать по существу одно и то же представление, но будет отображаться другая вкладка.

Это создало бы иллюзию, что все это было запущено, используя вкладки, хотя это не было.

Затем, когда у вас все было запущено, вы могли бы обновить эти ссылки, используя JQUERY, чтобы запустить запросы через AJAX, возвращая результаты в виде частичных представлений и обновления Div с результатом. Это означает, что люди с включенным JavaScript получают правильный опыт «Ajax», но он все еще работает нормально для людей с JavaScript.

Другие советы

user1079925,

Как вы говорите, существует множество способов сделать это, и все это будет зависеть от того, насколько «связаны» данные. Если все это происходит из одного и того же контроллера, то было бы иметь смысл иметь единую визуальную модель для инкапсуляции данных. Вот быстрое написание того, как это может выглядеть:

public class SubViewModelA
{
    public string SpecialProperty { get; set; }
}

public class SubViewModelB
{
    public string SpecialProperty { get; set; }
}

public class SubViewModelC
{
    public string SpecialProperty { get; set; }
}

public class TabbedViewModel
{
    public SubViewModelA TabA {get; set; }
    public SubViewModelB TabB {get; set; }
    public SubViewModelC TabC {get; set; }
}

Это будет ссылаться на ваш взгляд как:

@model TabbedViewModel

<div id="taba">@Html.EditorFor(model => model.TabA.SpecialProperty )</div>
<div id="tabb">@Html.EditorFor(model => model.TabB.SpecialProperty )</div>
<div id="tabc">@Html.EditorFor(model => model.TabC.SpecialProperty )</div>

Теперь это не красиво (я оставлю эту часть для вас), но позволит вам заполнить ваши «вкладки» из одного ViewModel. Другая альтернатива, как вы упоминаете, - иметь 3 @RenderAction() блокируются внутри Tab Divs, если данные полностью не связаны.

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