2

Ich möchte eine Anwendung erstellen, in der, wenn es Ajax ruft es zurückrufen Teilansicht und wenn es eine Seite aktualisieren Sie mit Layout und Rendern zurückkehren Skript. Aber das Problem ist Teilansicht nicht Abschnitte machen, denn das habe ich einen MVC Helfer in APP_CODE erstellt als:Asp.Net MVC Helper: Erstellen Sie einen globalen Helper zum Laden von Ansicht mit oder ohne Layout

@helper AddSection(Func<object, object> content) 
{ 
    if (IsAjaxRequest) 
    { 
     @content(null); 
    } 
    else 
    { 
     @section scripts { 
      @content(null); 
     } 
    } 
} 

Als ich es meiner Meinung nach nenne ich erhalte den Balg Fehler:

CS0103: The name 'DefineSection' does not exist in the current context 
Line 71: #line hidden 
Line 72: DefineSection("scripts",() => { 
Line 73: 

Ich habe viele Dinge ausprobiert, aber dieser Fehler ist immer noch da, ich habe auch viel gesucht, konnte aber keine Lösung finden.

+0

Um die Dinge zu verdeutlichen, möchten Sie die gleiche Aktion zweimal aufrufen. Einmal mit einer Standard-Get-Anfrage und einmal mit einer Xhr-Ajax-Anfrage? – JoeJoe87577

+0

ja, genau ... – CuriousGeek

Antwort

2

Ich suchte viel und fand, dass Abschnitt innerhalb des Helfers nicht möglich ist. unten sind der Link:

https://stackoverflow.com/a/22977735/5179246

Die @helper und @section Syntax sind spezielle Richtlinien für die Seiten zu kompilieren.

Ein HelperResult (ein Helfer) weiß nicht, wie man einen Abschnitt definiert.

Die Methode DefineSection gehört zu einer WebPageBase.

Sie müssen möglicherweise aus einer anderen Richtung kommen. Das Verwenden von Teilansichten anstelle von Helfern würde dieses Problem wahrscheinlich beheben.

Sie können verschachteltes Layout verwenden. Das innere Layout dient nur dazu, Körper und Skript zu rendern.

0

Sie könnten den Anforderungsheader überprüfen (wie in diesem question erläutert). Überprüfen Sie die X-Requested-With, wenn es XMLHttpRequest heißt, sollte es eine XHR (Ajax) Anfrage sein.

In Ihrer Steuerung können Sie eine PartialView in der gleichen Methode zurückgeben.

public ActionResult YourAction() 
{ 
    Boolean IsAjax = false; //check the request header 

    if (IsAjax) 
    { 
     ViewBag.UseLayout = false; 
     return PartialView("PartialView"); 
    } 
    else 
    { 
     return View("View"); 
    } 
} 

In Ihrer Ansicht könnten Sie die ViewBag.UseLayout lesen und entscheiden, das komplette Layout mit allen Bereichen zu machen oder nicht:

@{ 
    if (ViewBag.UseLayout == null || ViewBag.UseLayout) { 
     Layout = "~/Views/Shared/_Layout.cshtml"; 
    } 
    else { 
     Layout = null; 
    } 
} 

Sie, dass an die ViewStart.cshtml verlängern könnte, mit null Überprüfung der ViewBag so Dies würde für alle Ansichten gelten.

+0

Ich wusste schon, ob Teilansicht geladen werden soll oder nicht, das Problem ist, wenn es teilweise ist, möchte ich Skriptabschnitt laden, ohne Abschnitte zu rendern, und wenn es Vollansichtsabschnitt sollte gerendert werden. – CuriousGeek

+0

Ich denke nicht, dass es eine Teilansicht direkt vom Server durch einen Ajax-Aufruf laden würde. –

+0

Sie müssen wieder auf die Ansicht (die Ajax-Antwort) kommen, dann laden Sie die Partilal-Ansicht entsprechend aus der Ansicht. –

Verwandte Themen