384 Stimmen

Einfügen von Inhalten in bestimmte Abschnitte aus einer Teilansicht ASP.NET MVC 3 mit Razor View Engine

Ich habe diesen Abschnitt in meinem _Layout.cshtml

@RenderSection("Scripts", false)

Ich kann sie leicht aus der Vogelperspektive verwenden:

@section Scripts { 
    @*Stuff comes here*@
}

Was ich kämpfe mit ist, wie man einige Inhalte innerhalb dieses Abschnitts von einer partiellen Ansicht injiziert zu bekommen.

Nehmen wir an, dass dies meine Ansichtsseite ist:

@section Scripts { 

    <script>
        //code comes here
    </script>
}

<div>
    poo bar poo
</div>

<div>
  @Html.Partial("_myPartial")
</div>

Ich muss einige Inhalte in die Scripts Abschnitt von _myPartial Teilansicht.

Wie kann ich das tun?

9voto

archil Punkte 38473

Nach der unauffällig Im Prinzip ist es nicht unbedingt erforderlich, dass "_myPartial" Inhalte direkt in den Skriptbereich einfügt. Sie könnten die Skripte der Teilansicht in separate .js Datei und verweisen auf sie im @scripts-Abschnitt der übergeordneten Ansicht.

6voto

Mr. Baudin Punkte 1876

Es gibt einen grundlegenden Fehler in der Art und Weise, wie wir über das Web denken, insbesondere bei der Verwendung von MVC. Der Fehler besteht darin, dass JavaScript irgendwie in der Verantwortung des Views liegt. Eine Ansicht ist eine Ansicht, JavaScript (verhaltensbasiert oder nicht) ist JavaScript. In Silverlight und dem MVVM-Muster von WPF haben wir es mit "View first" oder "Model first" zu tun. In MVC sollten wir immer versuchen, vom Standpunkt des Modells aus zu denken, und JavaScript ist in vielerlei Hinsicht ein Teil dieses Modells.

Ich würde vorschlagen, die AMD Muster (ich selbst mag RequireJS ). Trennen Sie Ihr JavaScript in Module auf, definieren Sie Ihre Funktionalität und binden Sie JavaScript in Ihre HTML-Datei ein, anstatt sich darauf zu verlassen, dass eine Ansicht das JavaScript lädt. Dies wird Ihren Code aufräumen, trennen Sie Ihre Anliegen und machen das Leben einfacher alle auf einen Schlag.

3voto

purvin Punkte 61

Dies funktionierte bei mir, so dass ich Javascript und HTML für die Teilansicht in derselben Datei unterbringen konnte. Hilft mit Denkprozess zu sehen, html und verwandte Teil in der gleichen Teilansicht Datei.


In der Ansicht, die eine Teilansicht mit dem Namen "_MyPartialView.cshtml" verwendet

<div>
    @Html.Partial("_MyPartialView",< model for partial view>,
            new ViewDataDictionary { { "Region", "HTMLSection" } } })
</div>

@section scripts{

    @Html.Partial("_MyPartialView",<model for partial view>, 
                  new ViewDataDictionary { { "Region", "ScriptSection" } })

 }

In der Datei Partial View

@model SomeType

@{
    var region = ViewData["Region"] as string;
}

@if (region == "HTMLSection")
{

}

@if (region == "ScriptSection")
{
        <script type="text/javascript">
    </script">
}

3voto

Julio Spader Punkte 331

Die Verwendung von Abschnitten in der Teilansicht ist nicht erforderlich.

In Ihre Teilansicht einbeziehen. Es führt die Funktion aus, nachdem jQuery geladen wurde. Sie können de Bedingungsklausel für Ihren Code ändern.

<script type="text/javascript">    
var time = setInterval(function () {
    if (window.jQuery != undefined) {
        window.clearInterval(time);

        //Begin
        $(document).ready(function () {
           //....
        });
        //End
    };
}, 10); </script>

Julio Spader

2voto

Lomak Punkte 71

Sie können diese Erweiterungsmethoden verwenden : (Speichern als PartialWithScript.cs)

namespace System.Web.Mvc.Html
{
    public static class PartialWithScript
    {
        public static void RenderPartialWithScript(this HtmlHelper htmlHelper, string partialViewName)
        {
            if (htmlHelper.ViewBag.ScriptPartials == null)
            {
                htmlHelper.ViewBag.ScriptPartials = new List<string>();
            }

            if (!htmlHelper.ViewBag.ScriptPartials.Contains(partialViewName))
            {
                htmlHelper.ViewBag.ScriptPartials.Add(partialViewName);
            }

            htmlHelper.ViewBag.ScriptPartialHtml = true;
            htmlHelper.RenderPartial(partialViewName);
        }

        public static void RenderPartialScripts(this HtmlHelper htmlHelper)
        {
            if (htmlHelper.ViewBag.ScriptPartials != null)
            {
                htmlHelper.ViewBag.ScriptPartialHtml = false;
                foreach (string partial in htmlHelper.ViewBag.ScriptPartials)
                {
                    htmlHelper.RenderPartial(partial);
                }
            }
        }
    }
}

So verwenden:

Beispiel partiell: (_MyPartial.cshtml) Setzen Sie die html in das if und die js in das else.

@if (ViewBag.ScriptPartialHtml ?? true)
    <p>I has htmls</p>
}
else {
    <script type="text/javascript">
        alert('I has javascripts');
    </script>
}

Fügen Sie in Ihre _Layout.cshtml, oder wo auch immer die Skripte der Teilbereiche gerendert werden sollen, folgendes ein (einmal): Es wird nur das Javascript aller Teilbereiche auf der aktuellen Seite an dieser Stelle gerendert.

@{ Html.RenderPartialScripts(); }

Um Ihren Teilbereich zu verwenden, gehen Sie einfach wie folgt vor: Es wird nur die HTML an dieser Stelle gerendert.

@{Html.RenderPartialWithScript("~/Views/MyController/_MyPartial.cshtml");}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X