Adicionar programas no MVC

estou a começar com a primeira aplicação de MVC. Aqui tenho a confusão básica. Na verdade, o _Layout por omissão.ficheiro cshtml criado como por baixo

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width" />
    <title>@ViewBag.Title</title>
    @Styles.Render("~/Content/css")
    @Scripts.Render("~/bundles/modernizr")

</head>
<body>
    <script>

    </script>
    @RenderBody()

    @Scripts.Render("~/bundles/jquery")
    @RenderSection("scripts", required: false)
</body>
</html>

usei o modelo básico para não ter nenhum modelo. Mas verifica os ' @Scripts.Desenhar ("~/bundles/jquery")' linha. É depois do @RenderBody (). Na verdade, adiciona-se depois da secção do corpo.

Acho que esta é a melhor prática. Mas se eu adicionar $.(documento).pronto mostra o seguinte erro

Microsoft JScript erro de execução: '$ ' está indefinido

baseado no erro, ele por causa da tag script. Acabei de mudar os '@Scripts'.Desenhar ("~/bundles/jquery")' linha antes de @Render o corpo e a página final como

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width" />
    <title>@ViewBag.Title</title>
    @Styles.Render("~/Content/css")
    @Scripts.Render("~/bundles/modernizr")
    @Scripts.Render("~/bundles/jquery")

</head>
<body>
    <script>

    </script>
    @RenderBody()      
    @RenderSection("scripts", required: false)
</body>
</html>

o pedido funciona bem com o meu jquery.

Então porque é que isto aconteceu? Então, o programa que adiciona a marca precisa sempre antes do @RenderBody ? Então porque é que o modelo predefinido aparece na localização errada?

Author: tereško, 2014-03-24

3 answers

Isto provavelmente acontece porque você está adicionando os scripts antes da referência jQuery na página. Precisa de escrever programas dentro da Secção scripts nas suas vistas:

@section scripts {
    //stuff
}

Isto irá certificar-se de que será renderizado após a referência jQuery(RenderSection chamada).

 14
Author: Ufuk Hacıoğulları, 2014-03-24 08:18:24

O JQuery deve estar na cabeça e quaisquer scripts personalizados que escreva devem estar no fundo depois do corpo.

Isto é porque se você usar qualquer jQuery em seu corpo e não está envolto em um documento.pronto ele irá tentar executar antes do jQuery ser carregado e você receberá um erro $ is indefinido

 1
Author: logikal, 2014-03-24 08:08:52

@Scripts.O desenho não mostra os programas na secção 'scripts'. Ele torna a tag script apropriada onde a chamada é feita.

Para conseguir o que procura, este é praticamente o layout que eu uso:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width" />
    <title>@ViewBag.Title</title>
    @Styles.Render("~/Content/css")
    @Scripts.Render("~/bundles/modernizr")    
</head>
<body>
    @RenderBody()
    @Scripts.Render("~/bundles/jquery")
    <script>
        $(function() {
        });
    </script>
    @RenderSection("scripts", required: false)
</body>
</html>

Da mesma forma, o @ RenderSection é útil em vistas que utilizam este layout, e neste caso seria usado como:

@section scripts {
    <script>
        $(function() {
        });
    </script>
}

Normalmente é aconselhável não usar scripts inline no corpo, de modo que a renderização jQuery no fundo desta ordem vai funcionar bem.

 1
Author: Steve Andrews, 2014-03-24 08:19:34