Получить ControllerName и ActionName и заполнить ViewData в Ведущем устройстве Page?

На недавнем Python (> 2.7) версии, можно использовать ttk модуль, который обеспечивает доступ к Tk тематический виджет набор, который был представлен в Tk 8.5.

Вот то, как Вы импортируете ttk в Python 2:

import ttk

help(ttk.Notebook)

В Python 3, ttk модуль идет со стандартными дистрибутивами как с подмодулем [1 118] tkinter .

Вот простой рабочий пример на основе примера от TkDocs веб-сайт:

from tkinter import ttk
import tkinter as tk
from tkinter.scrolledtext import ScrolledText


def demo():
    root = tk.Tk()
    root.title("ttk.Notebook")

    nb = ttk.Notebook(root)

    # adding Frames as pages for the ttk.Notebook 
    # first page, which would get widgets gridded into it
    page1 = ttk.Frame(nb)

    # second page
    page2 = ttk.Frame(nb)
    text = ScrolledText(page2)
    text.pack(expand=1, fill="both")

    nb.add(page1, text='One')
    nb.add(page2, text='Two')

    nb.pack(expand=1, fill="both")

    root.mainloop()

if __name__ == "__main__":
    demo()

Другая альтернатива должна использовать NoteBook виджет от tkinter.tix библиотека. Для использования tkinter.tix необходимо было установить эти Tix виджеты, обычно вместе с установкой эти Tk виджеты. Для тестирования установки попробуйте следующее:

from tkinter import tix
root = tix.Tk()
root.tk.eval('package require Tix')

Для большего количества информации, проверьте этот веб-страница на веб-сайте PSF.

Примечание, которое tix довольно старо и не хорошо поддерживаемое, таким образом, Ваш лучший выбор мог бы состоять в том, чтобы пойти для [1 115].

33
задан Brant Bobby 7 August 2009 в 19:56
поделиться

3 ответа

Не использовать ViewData . Используйте вместо этого в своем Site.Master:

<%= ViewContext.RouteData.Values["Controller"] %>
<%= ViewContext.RouteData.Values["Action"] %>

SO - Получение имени контроллера и метода действия в представлении в ASP.Net MVC

63
ответ дан 27 November 2019 в 17:58
поделиться

Предполагая, что я правильно читаю ваш пост, и вы не пытаетесь получить доступ к именам контроллеров / действий в представлении, а ВМЕСТО пытаетесь что-то с ними сделать и помещаете результат в viewdata:

Вы не можете сделать это в конструкторе, потому что контекст еще не создан. Вам нужно переопределить метод Initialize:

protected override void Initialize(System.Web.Routing.RequestContext requestContext)
    {
        base.Initialize(requestContext);

        //here the routedata is available
        ViewData["controller_name"] = (ControllerContext.RouteData.Values["Controller"];
    }

(Обратите внимание, что вы можете передать в функцию только ControllerContext.RouteData и позволить ей выбирать нужные значения.)

3
ответ дан 27 November 2019 в 17:58
поделиться

Мне нужно было много разобраться с этими представлениями, и я рассмотрел это с немного другого угла - я написал несколько методов расширения для HtmlHelper, чтобы дать текущие ControllerName и ActionName. Немного проще в обращении, так как вам не нужно беспокоиться о том, чтобы нырнуть в пакет ViewData [] или ввести что-то в подходящие места.

1
ответ дан 27 November 2019 в 17:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: