如何在ASP.NET MVC站点的URL中存储有用的值并使其传播?

时间:2010-05-25 20:31:37

标签: asp.net-mvc routing html.actionlink

假设我有一个包含两个视图的简单ASP.NET MVC站点。视图使用以下路径:/ Foo和/ Foo / Bar。

现在假设我想使用URL来指定(仅为了示例)网站的背景颜色。我希望我的路线可以是/ Blue / Foo或/ Green / Foo / Bar。

另外,如果我从视图中调用Html.ActionLink,我希望Blue或Green值传播,而不必传入。所以,例如,如果我调用Html.ActionLink(“Bar”,“Foo”)来自/ Blue / Foo,我想/ Blue / Foo / Bar回来。

我最好能做到这一点吗?

(如果我错过了现有的帖子,请原谅我。这对我来说很难简明扼要,所以我不太清楚要搜索什么。)

2 个答案:

答案 0 :(得分:2)

查看这篇文章,特别是关于ActionLink

http://stephenwalther.com/blog/archive/2009/03/03/chapter-6-understanding-html-helpers.aspx

注意参数如何工作。您可以使用模型中的值在routeValues参数中传递颜色。

答案 1 :(得分:1)

就我个人而言,我认为从长远来看这实际上是“hacky”实施和维护的方式。

为什么不直接使用Url参数?

示例 - 具体实现如下:

public ActionResult BackGroundColorChangerAction(string color = "") { // <- Providing a default value if no value was defined
    ViewData["backgroundColor"] = color; // Or do some processing first

    return View();
}

现在我们需要在视图中显示该值。感谢ViewData,我们可以使用正确的数据轻松提供观看次数:

...
<body>
    <div>
        <h2>Your Current Color: <b><%: ViewData["backgroundColor"] %></b></h2>

        <%: Html.ActionLink("Red", "BackGroundColorChangerAction", new { color = "red" }) %><br />
        <%: Html.ActionLink("Green", "BackGroundColorChangerAction", new { color = "green" }) %><br />
        <%: Html.ActionLink("Blue", "BackGroundColorChangerAction", new { color = "blue" }) %><br />
    </div>
</body>
...

现在,您可以使用收到的ViewData [“backgroundColor”]值完成所有操作。 使用JavaScript连接它,您可以轻松地在html元素上进行颜色切换。

我使用链接和可选参数的固定字符串值来完成它,但您可以轻松设置Enum或包含此数据的数据库表。