He leído algunos temas similares aquí y en la web, pero creo que no he visto uno que se pudiera clasificar como un duplicado, así que voy a seguir adelante y publicar. Actualmente estoy cargando mi menús dinámicos de la base de datos así:

public void LoadMenus()
{
    var dbContext = new ContentClassesDataContext();
    var menus = from m in dbContext.Menus
                where m.MenuName != "Home" && m.MenuGroup == "RazorHome" && m.RoleID == "Facility"
                orderby m.Sequence, m.MenuName
                select m;

    var html = "";

    if (menus.Any())
    {
        html += "<span/>";

        foreach (var menu in menus)
        {
            html = html + $"<a href='{menu.URL}'>{menu.MenuName}</a><br/>";
        }
        html += "<hr>";
    }

    Session["Menus"] = html;
}

LoadMenus() está en mi clase de controlador, por lo que no soy capaz (a mi conocimiento) para el uso de la sintaxis de Afeitar. Yo prefiero la carga de los menús de la vista en su lugar, así que soy capaz de utilizar @Html.ActionLink(linkText, actionName, controllerName). Carga el HTML de la forma en que actualmente estoy haciendo es generar vínculos de texto según el regulador de corriente, por lo que los enlaces no siempre es correctamente interpretado. Es posible acceder a la base de datos de la vista? O tal vez a pasar en el contenido de la base de datos desde el controlador a la vista y, a continuación, procesar el menú de esa manera?

  • si desea utilizar la maquinilla de Afeitar, crear un PartialView y hacer LoadMenus un resultado de una acción y return PartialView("_Menu",menus); en su Vista Parcial puede recorrer a través de sus @model IEnumerable<Menu> y construir su menú. Sólo tiene que colocar @Hmtl.Action("LoadMenus") donde desea que el menú
  • Ah, creo que el @model bits puede haber sido lo que estoy buscando. He sido capaz de utilizar una vista parcial para el menú, pero aún estaba seguro de cómo acceder a la información desde dentro de la vista.
  • Yo también era capaz de generar los vínculos y especificar el controlador mediante el uso de Url.Action() así: $"<a href='{Url.Action(menu.URL, "Home")}'>{menu.MenuName}</a><br/>"
InformationsquelleAutor dub stylee | 2016-06-20

1 Comentario

  1. 4

    Usted debe mantener su código html en el cshtml vistas.

    Debe pasar los datos a través de la viewmodel y no a través de la sesión.

    1)

    En el controlador, obtener el menú de datos (en este ejemplo lo podemos recuperar algunos datos falsos).

    Crear un viewmodel que puede contener el menú datos y pasar a la vista, como se muestra a continuación:

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            var menu = GetMenu();
            var vm = new ViewModel() {Menu = menu};
            return View(vm);
        }
        private Menu GetMenu()
        {
            var menu = new Menu();
            var menuItems = new List<MenuItem>();
            menuItems.Add(new MenuItem() { LinkText = "Home" , ActionName = "Index", ControllerName = "Home"});
            menuItems.Add(new MenuItem() { LinkText = "About", ActionName = "About", ControllerName = "Home" });
            menuItems.Add(new MenuItem() { LinkText = "Help", ActionName = "Help", ControllerName = "Home" });
            menu.Items = menuItems;
    
            return menu;
        }
    }

    2)

    Este es el viewmodel

    public class ViewModel
    {
        public Menu Menu { get; set; }
    }

    Este punto de vista es un ejemplo de cómo se puede hacer que el menú de datos como un menú html

    @model WebApplication1.Models.ViewModel
    
    <ul id="menu">
        @foreach (var item in @Model.Menu.Items)
        {
            <li>@Html.ActionLink(@item.LinkText, @item.ActionName,
                  @item.ControllerName)</li>
          }
    </ul>

    3)

    Este es el ejemplo de menú para las clases que se utilizan (en representación de las entidades de la dbcontext)

    public class Menu
    {
        public List<MenuItem> Items { get; set; }
    }
    
    public class MenuItem
    {
        public string LinkText { get; set; }
        public string ActionName { get; set; }
        public string ControllerName { get; set; }
    }

    Aquí hay algunos enlaces para empezar:

    http://www.codeproject.com/Articles/585873/Basic-Understanding-On-ASP-NET-MVC
    http://www.asp.net/mvc/overview/getting-started/introduction/getting-started

    • Soy capaz de conseguir el menú cargado en la vista parcial como se describe en su respuesta, sin embargo, después de que el primer clic de un elemento, el Menu.Items se convierte en null y el sitio se rompe cuando se trata de representar la nueva página.

Dejar respuesta

Please enter your comment!
Please enter your name here