2011-08-21 3 views
5

Se ho quali javascript nel mio rasoio veiw:Come passare parametri a file di riferimento javascript dalla vista rasoio

@{ 
    Grid grid = @Model.GetGridFromModel(); 

    Bool isSomething = @Model.GetSomething(); 

    Bool isSomethingMore = @Model.GetSomehtingMore(); 

    Bool isSomethingElse = @Model.GetSomethingElse() 

    int caseCount = 0; 
} 



$(document).ready(function() {  
    $("#tabs").tabs({ 
     show: function (event, ui) {   
      switch (ui.index) { 
      @if (isSomething){ 
      <text> 
       case @caseCount:      

        change('@grid.Avalue'); 

        break; 
      </text> 
       caseCount++; 
       } 

      @if(isSomethingElse){ 
      <text> 
       case @caseCount: 

        change('@grid.Bvalue'); 
        break; 
      </text> 
       caseCount++; 
       } 

      @if (isSomethingElseMore){ 
      <text> 
       case @caseCount: 
        change('@grid.Cvalue'); 
        break; 
       </text>     
       } 
      } 
     } 
    }); 

    funciton change(id) 
    { 
    //doing somehting; 
    } 

Quindi voglio mettere quel javascript in un file e riferimento separato che file per mio punto di vista, e il problema è come posso passare i valori dal rasoio a javascript quando javascript in un file separato?

risposta

7

Javascript sono file senza essere analizzato dal compilatore, quindi, non hai nessuna possibilità ...

Cosa si può fare però è quello di utilizzare un javascript dinamica, ad esempio:

<script src="/CustomScripts/scripts.js"><script> 

avere un percorso che dice:

routes.MapRoute(
    "CustomScripts", "CustomScripts/{id}", 
    new { controller = "Scripts", action = "GetFile" } 
); 

Create il vostro controler e utilizzare un semplice return View(); come

public ActionResult GetFile(string id) 
{ 
    // use id as you please 

    // pass any Model you want 

    return View(); 
} 

In questa visualizzazione, è sufficiente inserire il javascript con la sintassi del rasoio .


Oppure è possibile utilizzare le variabili e caricare rendere l'utilizzo di RenderSection()

nel file _Layout.cshtml aggiungere una sezione nel vostro <head> prima di ogni altro JavaScript

<head> 
    <meta charset="utf-8" /> 
    <title>@ViewBag.Title</title> 
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> 

    @RenderSection("script_variables", false) 

    <script src="@Url.Content("~/Scripts/jquery-1.6.2.min.js")" type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/modernizr-2.0.6-development-only.js")" type="text/javascript"></script>  
</head> 

e in ogni View che si desidera aggiungere tali variabili, basta fare:

@Section script_variables { 

    <script type="text/javascript"> 

     var variableA = '@MyVarA', 
      variableB = '@MyVarB', 
      variableC = '@MyVarC'; 

    </script> 

} 

E tutti gli altri file che si caricano lo script avranno tale codice ...

1

Si potrebbe dichiarare alcuni JS-variabili sulla tua pagina e quindi utilizzare quelle variabili dal js file

Si potrebbe chiamare una funzione all'interno del vostro .js file e inviare i dati come argomenti

(si prega di prendere in considerazione la creazione di un oggetto e riempire con i dati invece di creare più variabili.)

+0

potresti fornire qualche dettaglio in più? – Joper

Problemi correlati