Представить и разметить набор кнопок в ASP.NET MVC 3 - PullRequest
2 голосов
/ 10 февраля 2012

Я работаю над компьютерной системой управления инцидентами.

В настоящее время представление 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);
    }

    ...

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

...

@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 для ее отображения контролируемым образом?

1 Ответ

0 голосов
/ 13 февраля 2012

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

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

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

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

@model IEnumerable<AvailableButton>.

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

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

Вот как я стараюсь создать свой пользовательский интерфейс, используя составные частичные представления

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

Строго говоря, логика, так что, на мой взгляд, не стоит расстраиваться из-за этого.

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