【问题标题】:Present and layout a set of buttons in ASP.NET MVC 3在 ASP.NET MVC 3 中呈现和布局一组按钮
【发布时间】:2012-02-10 12:58:09
【问题描述】:

我正在开发一个计算机支持事件管理系统。

目前,事件的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 以受控方式显示它?

【问题讨论】:

  • 您可以检查该表单是否可以在您的助手中呈现。只需发送一个枚举值并检查该视图是否可以呈现您的部分视图
  • 在我的局部视图中必须有一些东西让它知道如何呈现一个列表。问题是什么?从我的想象中应该很简单。

标签: asp.net-mvc-3 architecture razor


【解决方案1】:

我认为这取决于您的偏好。

如果您的布局中有一组连续的按钮,那么您可以将属性添加到现有视图模型中,然后循环渲染。例如:

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

或者有一个共享的局部视图,可以渲染一组按钮:

@model IEnumerable<AvailableButton>.

在这种情况下,您可以调用:

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

这就是我倾向于使用可组合的局部视图来构建我的 UI 的方式

但是,如果您的按钮分散在视图布局的不同区域,那么我认为您别无选择,只能单独检查。

这是严格的视图逻辑,所以在我看来你不应该为此感到难过。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 2013-02-13
    • 2015-05-22
    • 2017-11-27
    相关资源
    最近更新 更多