Как лучше справиться с заполнением моей страницы типа master-detail? - PullRequest
1 голос
/ 11 августа 2011

Итак, я работаю над своим первым приложением ASP.NET MVC 3 и отображаю jqGrid для пользователя с различными морожеными, которые мы делаем.После выбора одной из строк я в настоящее время вызываю Url.Action("Details", "IceCream"), и в результате создается модель представления IceCreamDetails, которая имеет несколько списков (например, RelatedDesserts, HistoricData) и делаю что-то подобное в моем файле Details.cshtml:

...

<div>
@foreach (var related in Model.RelatedDesserts)
{
   @Html.Partial("_RelatedDessert", related)
}
</div> 

...

и это работает, но не так уж и здорово, поэтому я решил, что было бы лучше создать подсетку для этих объектов RelatedDesserts и предоставить средство для щелчка по строке в этой сетке, чтобы отобразить изображение в другом div- так что-то вроде мастер-детали-изображения.Следите?

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

@Html.Action("SubGrid", RelatedDesserts)

для этого цикла foreach, описанного выше, и, конечно, вызывает действие SubGrid на контроллере RelatedDesserts.Это действие выполняет что-то вроде этого:

public PartialViewResult SubGrid(int iceCreamID)
{
   using (var db = new IceCreamEntities())
   {
      return PartialView(iceCreamID);  
   }
}

, которое отображает представление SubGrid, которое выглядит примерно так:

<table id="relatedGrid" cellpadding="0" cellspacing="0">
</table>
<div id="relatedPager" style="text-align: center">
</div>
<div id="relatedImage">
</div>
<script type="text/javascript">
$(document).ready(function() {
$('#relatedGrid').jqGrid({
   url: '@Url.Action("GridData", "RelatedDesserts", new {iceCreamID = @Model})',
...

и которое просматривает связанные данные десерта, создает результат и возвращаетэто так:

return Json(result, JsonRequestBehavior.AllowGet);

, и это заполняет relatedGrid моими данными.

Но кажется, что это не все так упрощено, и что все, что делает часть SubGrid, обеспечиваетцель для результатов действия GridData, но я не уверен, как объединить эти два действия (SubGrid и GridData), чтобы сделать вещи проще.Я, может быть, действительно поступаю неправильно.Как я могу упростить и улучшить это?

Ответы [ 2 ]

1 голос
/ 12 августа 2011

Вы правы, что немного странно делать эти два звонка. Однако, судя по всему, я не думаю, что вы могли бы поместить все субданные в модель, как предлагает @cyrotello. Это может быть очень нахальная модель, которая будет более сложной, чем простой.

В этом сценарии я бы просто использовал ссылку в главном jqGrid для запуска функции JavaScript, которая перепривязывает дочерний jqGrid на месте посредством $.get() вызова действия контроллера, которое будет обслуживать модель, характерная для этого подвида. Эта структура позволит вам не только перепривязать этот встроенный jqGrid, но и заполнить любые другие вспомогательные элементы, которые вы, возможно, захотите иметь в этом дочернем подвиде.

В конечном счете, я думаю, что сложность, которую вы ощущаете, связана с попыткой сверх - использования инфраструктуры MVC. Похоже, более простое манипулирование JavaScript на вашей странице может быть проще.

1 голос
/ 11 августа 2011

Вот мое предложение: используйте одну модель и одно представление.

Заполните вашу модель всеми данными, необходимыми для представления: выполните все вызовы базы данных перед отправкой в ​​представление.

Затем в вашем представлении, которое мы назовем «Подробности», вы можете выполнять все итерации HTML (строки таблицы и т. Д., Даже несколько итераций - не волнуйтесь, для этого и нужны представления!),и настройка JavaScript.Нет необходимости разделять их на частичные представления, если только вы сами не используете их на других страницах.

Бывают моменты, когда вам нужно разделить вещи на Частичные или Дочерние Действия;например, когда все слишком сложно или для повторного использования - но здесь это не так.

В MVC simple заставляет вас улыбаться.:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...