2017-01-28 2 views
0

Hier habe ich eine Teilansicht in MVC 5Dynamische Daten von ViewBag auf Teilansicht gerendert auf _Layout

@modelType HOA5.MainMenuModel 

<div class="navbar navbar-inverse navbar-fixed-top" id="mainNavbar"> 
    <div class="container"> 
     @Html.Raw(ViewBag.htmlstr) 
    </div> 
</div> 

... und die Steuerung kehrt einige dynamische Inhalte ViewBag

Function Index() As ActionResult 
    Dim vModal As New MainMenuModel 
    vModal.MenuHTML = SB.ToString 
    Dim MenuHTML As String = ReturnMenu() 
    ViewBag.htmlstr = MenuHTML 
    Return View("MainMenuView") 
End Function 

.. und dann nur diese Ansicht ausführen

http://localhost:52735/mainMenu/ 

Es funktioniert perfekt und fügt den dynamischen Inhalt ein. Allerdings, wenn ich die Teilansicht in dem _Layout

@Html.Partial("~/Views/MainMenu/MainMenuView.vbhtml") 

und führen Sie es

http://localhost:52735 

Dann wird die statischen Inhalte angezeigt wird, aber nicht der dynamische Inhalt .. Habe auch versucht, Varianten von @RenderAction, @RenderPartial aber entweder stimmt das nicht, oder ich habe die Syntax durcheinander gebracht!

Alle Zeiger würde geschätzt als Kopf zu oft heute eingeführt wurde :-) Sie

Vielen

+0

versuchen @ Html.Partial ("MainMenuView") oder die Ansicht/Shared bewegen und versuchen, es – Mate

+0

Hallo Kamerad (jetzt fühle ich mich, dass ich bin zurück in Großbritannien) - versuchte eine Anzahl von Varianten und der vollständige Pfad war das einzige, das die Ansicht ohne einen Fehler zurückgab - jedoch fand ich eine Methode ohne eine Teilansicht, die funktioniert und sie unten veröffentlichte. Vielen Dank für Ihre Antwort – gchq

+0

'@ Html.Partial()' ruft nicht Ihre Controller-Methode auf - es gibt nur den HTML-Code wieder, der auf dem Modell basiert, das Sie übergeben (und Sie haben kein Modell übergeben!). Verwende '@ {Html.RenderAction (" Index ", controllername); } 'um die Methode aufzurufen und das HTML zurückzugeben (und die Methode sollte ein' PartialView() ', nicht' View() 'zurückgeben –

Antwort

-1

Wie so oft an der Wand machen wir die Dinge komplizierter :-)

Die einfache Lösung war, um die Funktion zu machen, dass der HTML-String eine Action

Function ReturnMainMenu() As ActionResult 
     Try 
      strSQL = "SELECT * FROM Customers" 
      Using DS As DataSet = ReturnDataSet_Data(strSQL, 2, False) 
       For Each row As DataRow In DS.Tables(0).Rows 

       Next 
      End Using 
      Dim vModal As New MainMenuModel 
      Dim SB As New StringBuilder 
      SB.Append("<div class=""navbar navbar-inverse navbar-fixed-top"" id=""mainNavbar"">") 
      SB.Append("<div class=""container"">") 
      SB.Append("<div class=""navbar-header"">") 
      SB.Append("<button type=""button"" class=""navbar-toggle"" data-toggle=""collapse"" data-target="".navbar-collapse"">") 
      SB.Append("<span class=""icon-bar""></span>") 
      SB.Append("<span class=""icon-bar""></span>") 
      SB.Append("<span class=""icon-bar""></span>") 
      SB.Append("</button>") 
      SB.Append("<a class=""navbar-brand"" href=""/"">Add Variable Here xxx</a>") ' Add the variable here 
      SB.Append("</div>") ' End of navbar-header 

      SB.Append("<div class=""navbar-collapse collapse"">") 
      SB.Append("<ul class=""nav navbar-nav"">") 
      SB.Append("<li><a href=""/"">Home</a></li></li>") 
      SB.Append(" <li><a href=""/eInvoice"">Upload eInvoice</a></li>") 
      SB.Append("<li><a href=""/ContactUs"">Contact</a></li>") 
      SB.Append("</ul>") 
      SB.Append("</div>") 'end of navbar-collapse 
      SB.Append("</div>") 
      SB.Append("</div>") 
      Dim checkstring As String = SB.ToString 


      vModal.MenuHTML = SB.ToString 

      Return Content(checkstring) 
     Catch ex As Exception 
      Return Nothing 
     End Try 
    End Function 

Dann kehrt (jetzt verstehe ich die Syntax) fügen sie _Layout

@Html.Action("ReturnMainMenu", "MainMenu") 

... und alles funktioniert ....

Verwandte Themen