2012-02-10 1 views
2

Я работаю над системой управления инцидентами с помощью компьютера.Представить и разместить набор кнопок в ASP.NET MVC 3

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

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

A part ViewModel to which the Review view is bound:

... 

    public bool CanContactUser() 
    { 
     return _manager.CanContactUser(Incident, User); 
    } 

    public bool CanComment() 
    { 
     return _manager.CanSetComment(Incident); 
    } 

    ... 

в представлении, в зависимости от результата этих методов, фактическая кнопка для Parti или не отображается:

... 

@if (Model.CanContactUser()) 
{ 
    @Html.MakePopupForm("ContactUser", new[] { "id" }, title: "Register user contact", refreshOnSuccess: true, okText: "Save", cancelText: "Cancel", resizable: false) 
} 

@if (Model.CanComment()) 
{ 
    @Html.MakePopupForm("Comment", new[] { "id" }, title: "Comment", refreshOnSuccess: true, okText: "Save", cancelText: "Cancel", resizable: false) 
} 

... 

Я чувствую, что это плохая практика. Несмотря на то, что он работает, я готов иметь набор доступных кнопок в памяти (в коде C#), я думаю, в экземпляре класса ViewModel и привязать представление для рендеринга этой коллекции.

Как это можно достичь? Привязка вида к коллекции кнопок в частности. Я могу создать абстрактную коллекцию List<AvailableButton> buttonsToRenderAsHtml ... Но как мне связать Razor, чтобы отображать ее контролируемым образом?

+0

вы можете проверить, может ли эта форма отобразиться в вашем помощнике. Просто отправьте значение перечисления и проверьте, что представление может отобразить ваш частичный вид. – Yorgo

+0

. В моем частичном представлении должно быть что-то, давайте узнаем, как отобразить List . Вопрос в том, что? Это должно быть довольно просто из того, что я могу себе представить. –

ответ

0

Я думаю, это зависит от ваших предпочтений.

Если у вас есть смежный набор кнопок в вашем макете, вы можете добавить свое свойство в существующую модель представления, а затем визуализировать в цикле. EG:

@foreach(var button in Model.AvailableButtons) { 
    YourButtonRenderMethod(button) 
} 

или имеют общий частичный вид, что может оказать набор кнопок с:

@model IEnumerable<AvailableButton>.

В этом случае вы можете просто позвонить:

@Html.RenderPartial("SetOfButtons", Model.AvailableButtons)

Это, как я, как правило, построить мой пользовательский интерфейс с помощью компонуемого частичного вида

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

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