Как я могу сохранить полезное значение в URL моего сайта ASP.NET MVC и заставить его распространяться? - PullRequest
3 голосов
/ 26 мая 2010

Допустим, у меня есть простой сайт 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 ]

2 голосов
/ 26 мая 2010

Ознакомьтесь с этой статьей, в частности о ActionLink

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

Обратите внимание, как работают параметры. Вы можете передать цвет в параметре routeValues, используя значение из вашей модели.

1 голос
/ 26 мая 2010

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

Почему бы вам не использовать вместо них параметры 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 или таблицу базы данных, которая содержит эти данные.

...