【问题标题】:Make a _Layout link differ in its action when it is used on a different page?当 _Layout 链接在不同页面上使用时,它的操作会有所不同吗?
【发布时间】:2015-01-06 14:21:24
【问题描述】:

假设我有的布局页面(所有页面通用):

+------------------------------------+
|         HEADER                     |
+------------------------------------+
| N |                                |
| A |                                |
| V |         CONTENT                |
| B |          HERE                  |
| A |                                |
| R |                                |
|   |                                |
|   |                                |
+------------------------------------+
|        FOOTER                      |
+------------------------------------+

在我的标题中,我有类似的内容:

标题:

+------------------------------------------------
|
|    LINK_1 | Create | Edit | Remove
|
+-----------------------------------------
|                |
|                |
|

每当我进入“位置”页面时,我希望它运行“添加位置”功能,但是当它在“用户”页面上时,我希望它运行“添加用户”功能。

这可能吗? (按下_Layout页面上的按钮,它会根据当时显示的内容做不同的事情)?

如果是这样,我应该如何实施?在 _layout 标头上?每个位置/用户页面本身的具体功能?

另类

如果这不可能,那么根据地址值创建一个switch语句怎么样?

localHost/Locations //pressing it here will addLocation
localHost/Users     //pressing it here instead will addUser

【问题讨论】:

    标签: jquery html layout


    【解决方案1】:

    有几种方法可以做到这一点。

    1 个自定义部分(首选)

    使用自定义 section 对您来说最有意义,因为它是可选的并且需要很少的设置:

    在你想要按钮的布局中:

    @RenderSection("addoption", required: false)
    

    然后在您的users 查看页面中的任何位置:

    @section addoption{
       @Html.ActionLink("Add User", "adduser", "Users")
    }
    

    在您的location 查看页面中

    @section addoption{
       @Html.ActionLink("Add Location", "addlocation", "Location")
    }
    

    2 ViewBag

    另一个选项是使用ViewBag,从特定的控制器操作将所需的链接值传递给布局。这需要在多个地方进行设置。

    例如在布局页面中:

    @Html.ActionLink(@ViewBag.AddTitle, @ViewBag.AddAction, @ViewBag.AddController)
    

    在位置索引操作中类似于:

      ViewBag.AddTitle = "Add location";
      ViewBag.AddAction = "AddLocation";
      ViewBag.AddController = "Locations";
    

    在用户索引操作中类似于:

      ViewBag.AddTitle = "Add user";
      ViewBag.AddAction = "AddUser";
      ViewBag.AddController = "Users";
    

    3 仅限操作

    另一个简单的选项是让您的链接简单地引用一个没有控制器的 add 操作。

    @Html.ActionLink("Add", "add")
    

    这将在当前控制器上调用add 操作。您可以将其与选项 2 的一部分结合使用,以使用 ViewBag 值仅设置链接文本。

    【讨论】:

    • 我认为第一个是可能的,但我不得不笑,因为我一直将“addoption”读为“adoption”。我也忽略了在我的问题中提到我使用图像/图标作为链接,但不应该从那里进行过多的编辑。
    • 这很有趣 :) 总是通过样式在链接上做图片(如果可能的话)。
    • 我不确定我的设置是否允许这样做 - 除了分别添加 5-6 个图像(我想与添加它们实际上是一样的)。我会研究一下“@RenderSection”,看看它是如何工作的
    • 您可以从任何视图将任何代码/HTML 注入RenderSection,这样是最灵活的。有点像一个微小的 PartialView。玩得开心:)
    • 是否也可以注入<script>
    猜你喜欢
    • 1970-01-01
    • 2011-12-30
    • 2013-03-15
    • 2018-09-16
    • 1970-01-01
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    • 2013-05-19
    相关资源
    最近更新 更多