2016-11-04 3 views
-1

In aC# MVC-Projekt, war ich eine Ansicht von einem Front-End-Designer gegeben, das dieses kleine Skript enthält:Konvertieren eine statische Javascript-Funktion, um dynamische

<script> 
    $('#PhaseDD').change(function() { 
     var chosenValue = $(this).val(); 
     $('.ProcessDD').hide(); 
     if (chosenValue == "") 
      $('#DefaultProcess').show(); 
     if (chosenValue == "Planning") 
      $('#PlanningProcess').show(); 
     if (chosenValue == "Procurement") 
      $('#ProcurementProcess').show(); 
     if (chosenValue == "Installation") 
      $('#InstallationProcess').show(); 
     if (chosenValue == "Closure") 
      $('#ClosureProcess').show(); 
    }); 
</script> 

Ich mag würde all die hartcodiert ersetzen Optionen mit einer Liste, die aus dem Modell kommt. Etwas wie das ...

<script> 
    $('#PhaseDD').change(function() { 
     var chosenValue = $(this).val(); 
     $('.ProcessDD').hide(); 
     if (chosenValue == "") 
      $('#DefaultProcess').show(); 

     // loop over a list from the model here 

     if (chosenValue == " loop-item-name ") 
      $('# loop-item-name + Process').show(); 

     // end loop 

    }); 
</script> 

Ist das möglich? Wenn das so ist, wie? Und mache ich das überhaupt richtig? Ich dachte, ich könnte Rasierersyntax verwenden, aber das funktioniert nicht.

+1

Was ist damit: '$ ('#' + selectedValue + 'Process'). Show()'? Sie brauchen dafür keine Liste. –

+0

'$ (" # "+ (selectedValue ||" Default ") +" Prozess "). Show();' – Pointy

+0

Warum benutzen Sie wenn sonst? füge Process direkt zur Variablen hinzu –

Antwort

0

Ich würde nur ein Array machen, überprüfen, ob der Wert darin existiert, und wenn es es zeigt. Etwas wie dieses:

<script> 
    $('#PhaseDD').change(function() { 
     var chosenValue = $(this).val(); 
     var processes = ['Planning', 'Procurement']; 
     $('.ProcessDD').hide(); 
     if (chosenValue == "") 
      $('#DefaultProcess').show(); 

     if (processes.indexOf(chosenValue) > -1) 
      $('#' + chosenValue + 'Process').show(); 

    }); 
</script> 
+0

ok ok ... ich sehe, was du denkst, und das ist ein viel besserer Weg. Die Syntax, die Sie haben, funktioniert nicht, aber es könnte ausreichen, um mich dorthin zu bringen. –

+0

Aber auch, ich kann nicht Planung, Procurment, etc, hart codiert haben. muss dynamisch sein. –

0

Ich überhielt dieses.

$('#PhaseDD').change(function() { 
     var chosenValue = $(this).val(); 
     $('.ProcessDD').hide(); 
     if (chosenValue == "") 
     { 
      $('#DefaultProcess').show(); 
     } 
     else 
     { 
      $('#' + chosenValue + 'Process').show(); 
     } 
    }); 
0

Sie können eine C# -Variable nicht mit einer JS-Variablen vergleichen. Sie können jedoch mit dem Rasierer eine JS-Variable aus einer C# -Variablen erstellen.

Hier ist, wie ein JS-Array mit den Werten eines C# Array zu füllen:

@{ 
    // fetch this from ViewModel if it needs to be dynamic 
    var cSharpNames = new [] { "Planning", "Procurement"}; 
} 

<script> 
    var jsNames = []; // this is a JS array 

    @foreach(var name in cSharpNames) { 
     <text>jsNames.push(@name);</text> 
    } 

</script> 

dann die indexOf() Methode in der jsNames Array suchen wie von Jeremy gezeigt.

Verwandte Themen