Pergunta

Eu tenho uma visão usando uma página mestra que contém alguns javascript que precisa ser executado usando o OnLoad do Corpo. Qual é a melhor maneira de definir o OnLoad no meu MasterPage apenas para determinados pontos de vista?

Na idéia que eu tentei foi para passar o nome da função javascript como ViewData. Mas eu realmente não quero que meus controladores de ter que saber sobre a javascript na página. Eu realmente não gosto dessa abordagem ...

<body onload="<%=ViewData["Body_OnLoad"]%>">
<asp:ContentPlaceHolder ID="MainContent" runat="server" />

Edit - Suponho que uma ideia seria usar documento pronto evento de jQuery em vez ...

Quaisquer outras ideias?

Foi útil?

Solução

Eu tenho usado o seguinte padrão com meu projeto MVC atual e parece estar funcionando muito bom para os meus js trabalhar até agora ...

Dentro do meu Mestre página I carregar meus arquivos de script padrão que eu quero ser usado em todas as minhas páginas de conteúdo (coisas como jquery.js, global.js, jQuery-plugins, arquivos .css, etc.). Eu, então, definir quaisquer eventos que são necessários na minha página mestra (onLoad, onSave, etc.). Cada página de conteúdo que eu crio terá seu arquivo .js próprio associado com ele e eu carregar esse arquivo de script dentro da página aspx conteúdo. Quaisquer .js eventos que precisam ser implementados de forma diferente entre páginas de conteúdo são tratados dentro de arquivo do conteúdo individual .js. Então, basicamente a minha página mestra tem um conjunto de .js funções que meus scripts de páginas de conteúdo irá implementar. Agora eu só armazenar os modelos js assinaturas de função em um arquivo e copiar e colá-los em cada novo arquivo content.js que eu preciso para criar. No entanto, estou pensando em construir um gerador de código ou ferramenta que iria cuspir essas assinaturas modelo para mim em qualquer novo arquivo .js eu preciso criado (se js tem alguma forma de capacidade de interface ou herança apresenta deixe-me saber).

Então, para recapitular:

Cargas MasterPage.Master: jquery.js, global.js, plugins.js

ContentPage Cargas: ContentPage.js

Global.js contém funções que a página invoca mestre que não mudam entre páginas de conteúdo juntamente com quaisquer outras funções de rotina global.

Cada ContentPage.js implementos suas próprias funções para a página de conteúdo junto com essas funções os Invoca página mestra que têm um comportamento diferente.

Outras dicas

Agora que JQuery é oficialmente parte da ASP.NET MVC, eu recomendo usá-lo. É pequeno, e acrescenta toneladas de valor à sua aplicação.

Eu recomendaria adicionando a versão de Mustafa de JQuery que tem os comentários IntelliSense inclui:

jquery-1.2.6-intellisense. js

Em seguida, acrescente aos seus Scripts pasta (novo no MVC Beta 1), e referenciá-lo como este:

<script language="javascript" type="text/javascript" src="../../Scripts/jquery-1.2.6-intellisense.js"></script> 

Em seu código você pode agora adicionar uma função como esta:

$(document).ready(function() {
   // do stuff when DOM is ready
});

Uma vez que você mencionou que você só quer que aconteça em certos pontos de vista, você pode adicionar um espaço reservado em sua página mestra assim:

<asp:contentplaceholder id="JavascriptPlaceholder" runat="server"></asp:contentplaceholder>  

Então, em sua opinião, você pode optar por colocar o código em lá, ou não.

que ir para dentro da seção de cabeça

Solução de Blog: Usando corpo oNLOAD com ASP.net 2,0 MasterPages

MasterPage.master

<head>
<asp:ContentPlaceHolder runat="server" id="Headers">
</asp:ContentPlaceHolder>
<script language=javascript>
   function mp_onload() {
     if(window.body_onload != null)
     window.body_onload();
   }
</script>
</head>
<body onload="mp_onload();">

Default.aspx

<asp:Content ID="Content2" ContentPlaceHolderID="Headers" Runat="Server">
<script language="javascript">
   function body_onload()
   {
       //do something
   }
</script>
</asp:Content>
 

Você deve definitivamente estar usando jQuery ou outra estrutura JavaScript de qualquer maneira.

Tenha os seus controladores de passar algum tipo de indicador de status para seus pontos de vista, mas as coisas específicas-vista não como os nomes das funções de JavaScript. Cabe a seus pontos de vista para mapear os indicadores de status para os nomes das funções de JavaScript.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top