2013-09-22 5 views
1

Folks,MVC мастер-деталь с различными типами подробно

Окружающая среда: ASP .NET MVC 4

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

Я предполагаю, что мне нужно создать частичные виды, соответствующие каждому типу детали, и как-то программно показать правильный вид.

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

Заранее благодарю вас за помощь.

С уважением,
Питер

+0

Если вы проверяете по умолчанию ASP.NET MVC шаблон поставляется с проектом, делает именно это, если вы не хотите загружать содержимое с помощью AJAX. –

ответ

1

Есть определенно несколько способов сделать это, один должен был бы создать специальный Action в вашем Controller для каждого мастер-детали сценария:

public class HomeController : Controller 
{ 
    public ActionResult Detail1(Model model) 
    { 
     return View(model); 
    } 

    public ActionResult Detail2(Model model) 
    { 
     return View(model); 
    } 
} 

Далее вы бы создайте повторно используемую команду Partial для основной таблицы, и в зависимости от вашей логики введите правильный Action (псевдокод):

<td> 
    @if (<your logic for the detailed view to be displayed>) 
    { 
     Html.ActionLink("Edit", "Detail1"); 
    } 
    else 
    { 
     Html.ActionLink("Edit", "Detail2"); 
    } 
</td> 

Вы должны отобразить главную таблицу как из Detail1, так и из Detail2. Надеюсь, я правильно вас понял. Ура!

Update - Ajax

Если вы не хотите, чтобы вся страница будет обновляться, когда новая деталь показана можно использовать Ajax.ActionLink в главной таблице и изменить HomeController методы для возврата PartialView для каждого тип детали.

<td> 
    @if (<your logic for the detailed view to be displayed>) 
    { 
     Ajax.ActionLink("Edit", "Detail1", options); 
    } 
    else 
    { 
     Ajax.ActionLink("Edit", "Detail2", options); 
    } 
</td> 

Где options указать UpdateTargetId в DIV, который должен быть заменен на детальном возвращенного из контроллера.

public class HomeController : Controller 
{ 
    public ActionResult Master() 
    { 
     return View(); 
    } 

    public ActionResult Detail1() 
    { 
     return PartialView(); 
    } 

    public ActionResult Detail2() 
    { 
     return PartialView(); 
    } 
} 

Наконец, включите jquery.unobtrusive скрипт в мастер зрения (который проживает по умолчанию в ~/bundles/jqueryval пачке):

@section scripts 
{ 
    @Scripts.Render("~/bundles/jqueryval") 
} 
+0

Благодарим за помощь. Проблема с ActionLink заключается в том, что это приведет к отображению новой страницы. Я хочу, чтобы мои данные отображались ниже основного списка. Я принимаю этот ответ, когда вы близко. Я буду использовать RenderPartial для отображения того, что мне нужно. – Peter

+0

Конечно, вы также можете использовать Ajax.ActionLink, я буду обновлять свой ответ для полноты. – MonkeyCoder

Смежные вопросы