Eu tenho um .csHtml
arquivo -razor com uma função javascript que usa a @Url.Content
função C # interna para a URL ajax.
Quero mover essa função para um .js
arquivo referenciado de minha visão.
O problema é que o javascript não "conhece" o @
símbolo e não analisa o código C #.
Existe uma maneira de fazer referência a .js
arquivos na visualização com o símbolo "@"?
c#
javascript
asp.net-mvc
asp.net-mvc-3
razor
gdoron está apoiando Monica
fonte
fonte
Respostas:
Você pode usar
data-*
atributos HTML5 . Suponhamos que você deseje realizar alguma ação quando algum elemento DOM, como um div, for clicado. Assim:e então, em seu arquivo javascript separado, você poderia trabalhar discretamente com o DOM:
Dessa forma, você poderia ter uma separação pura entre marcação e script sem precisar de nenhuma tag do lado do servidor em seus arquivos javascript.
fonte
Bem, eu acabei de encontrar um motor de barbear no Nuget que faz isso! O significado resolve a
@
sintaxe!Seu nome é RazorJS .
O pacote Nuget
Atualização de 2016:
O pacote não foi atualizado por 5 anos, e o link do site do projeto está morto. Eu não recomendo que as pessoas usem mais esta biblioteca.
fonte
Uma maneira de resolver o problema é:
Adicionando uma visão parcial com as funções javascript à visão.
Desta forma, você pode usar o
@
símbolo e todas as suasjavascript
funções serão separadas da visualização.fonte
Você tem duas opções:
Por exemplo:
E então, em sua visão, defina-o:
ATUALIZAR
Você pode estar se perguntando que nenhum é bom por causa do acoplamento, bem, é verdade, você está acoplando js e view. É por isso que os scripts devem ignorar o local em que estão sendo executados, portanto, é um sintoma de organização inadequada de arquivos.
De qualquer forma, há uma terceira opção para criar um mecanismo de visualização e executar os arquivos js no barbeador e enviar os resultados de volta. Isso é mais limpo, mas muito mais lento, então também não é recomendado.
fonte
Para obter a
@
variável em seu arquivo .js, você terá que usar uma variável global e definir o valor dessa variável na visualização mvc que está usando esse arquivo .js.Arquivo JavaScript:
Arquivo MVC View:
Apenas certifique-se de que qualquer chamada para sua função aconteça APÓS o valor ter sido definido pela visualização.
fonte
Provavelmente, essa não é a abordagem certa. Considerando a separação de interesses. Você deve ter um
data injector
em suaJavaScript
classe e que na maioria dos casos são dadosJSON
.Crie um arquivo JS em sua
script
pasta e adicione esta referência ao seuView
Agora, considere uma
JavaScript
classe literal em seuyourJsFile.js
:Também declara uma classe
Agora,
Action
faça isso:E do seu ponto de vista:
fonte
Recentemente fiz um blog sobre este tópico: Gerando arquivos JavaScript externos usando visualizações parciais do Razor .
Minha solução é usar um atributo personalizado (
ExternalJavaScriptFileAttribute
) que renderiza uma visão parcial do Razor como está e então a retorna sem as<script>
tags circundantes . Isso o torna um arquivo JavaScript externo válido.fonte
Eu costumo embrulhar o JS precisando de acesso às propriedades do modelo, nas funções e depois passar o @something na view. Por exemplo
na visualização, adiciono a invocação de função via (apenas um exemplo):
fonte
Acho que você está preso em ter que colocar esse código JS no View. O analisador Razor, até onde eu sei, não vai olhar para arquivos .js, portanto, qualquer coisa que você tiver que use
@
não funcionará. Além disso, como você percebeu, o próprio Javascript não gosta desse@
caractere rondando sem motivo, a não ser, digamos, em uma string.fonte