19

So versuche ich, einen Parameter an eine JavaScript-Funktion mit dem Rasierer '@' -Notation (in einer MVC-4 View) übergeben, aber ich bin syntax error: "Nicht abgeschlossene String-Konstante"Wie übergibt man einen Rasierer-Wert an eine JQuery-Funktion in einer MVC-Ansicht

Gibt es eine andere Möglichkeit, die ich schreiben sollte?

@foreach (var item in Model) 
{ 
... 
    <input type="button" value="Assign" onclick="AssignButtonClicked('@item.ID')" /> 
} 

Ich habe die gleiche Syntax wie diese Antwort https://stackoverflow.com/a/5179316/1662619

bearbeiten verwendet:

Es ist nur ein Syntaxfehler, die Funktionalität noch funktioniert

+0

Lösung: - entfernen Sie die einfachen Anführungszeichen um @ item.ID – Kings

Antwort

26

Wenn Sie JQuery.data()

<input type="button" value="Assign" onclick="AssignButtonClicked(this)" 
     data-assigned-id="@item.ID" /> 

Weitere können sie abgerufen werden können

function AssignButtonClicked(elem){ 
    var id= $(elem).data('assigned-id'); 
} 
+0

Das ist eine schöne Lösung, danke – Jimmy

0

Sie haben versucht, mit:

<input type="button" value="Assign" onclick="AssignButtonClicked('@item.ID');" /> 

Ich habe ein Semikolon am Ende von Javascript functio hinzugefügt n nennen AssignButtonClicked('@item.ID');

+0

ja, immer noch die gleichen Syntaxfehler – Jimmy

+0

Syntaxfehler. Meine ist 'onclick =" javascript: alert ('@ Model.username.ToString()'); " ' –

2

die Sie interessieren,

<input type="button" value="Assign" onclick="AssignButtonClicked(@item.ID);" /> 

Script

<script type="text/javascript"> 

function AssignButtonClicked(obj) { 
     alert(obj); 
     return false; 
    } 
</script> 
+1

gibt immer noch den gleichen Syntaxfehler – Jimmy

+0

@Jim Barton Es funktioniert perfekt auf meinem Projekt.Können Sie Code für' foreach' loop zeigen. – Jaimin

+0

Die Eingabe-Tag ist in einem , wenn das einen Unterschied macht? Der Rest der Schleife besteht nur aus @ Html.DisplayFor (ModelItem => item.Forename) Zeilen etc .. – Jimmy

2

Als Alternative, können Sie die andere Art und Weise verwenden können @item.ID in Ihre jQuery-Funktion zu erhalten. Fügen Sie einfach hiden span hinzu und erhalten Sie den Wert in Ihrer Funktion.

Sagen Sie, Sie haben Liste:

<ul> 
@foreach (var item in Model) 
{ 
... 
    <li> <input type="button" value="Assign" onclick="AssignButtonClicked()" /> 
     <span class="hidenID">@item.ID</span> 
</li> 
} 
</ul> 

als in Ihrem Skript hinzufügen:

<script> 
$(document).ready(function(){ 
$('.hidenID').hide() //**hide your span 
}); 

function AssignButtonClicked() 
{ 
... 
var id = $(this).closest('li').find('.hidenID').text(); 
... 
} 

</script> 

Aber meiner Meinung nach für jQuery besserer Ansatz ist wie folgt:

<ul> 
     @foreach (var item in Model) 
     { 
     ... 
      <li> <input type="button" value="Assign" class="button" /> 
       <span class="hidenID">@item.ID</span> 
     </li> 
     } 
     </ul> 
    <script> 
     $(document).ready(function(){ 
     $('.hidenID').hide() //**hide your span 
     }); 

     $(function(){ 
     $('.button').click(function(){ 
     ... 
     var id = $(this).closest('li').find('.hidenID').text(); 
     ... 
     } 
    }); 

}); 

    </script> 
9

try dies

<input type="button" value="Assign" 
    onclick="@("AssignButtonClicked('"+item.ID+"')")" /> 
0

Um diese Art von Problem zu vermeiden verwenden, können Sie alle Ihre js Funktionsaufruf in C# -Code Abschnitt bauen.

Statt:

<input type="button" value="Assign" onclick="AssignButtonClicked('@item.ID')" /> 

Verwendung:

@{ 
    var assignFunctionCall = "AssignButtonClicked(" + item.ID + ")"; 
} 
<input type="button" value="Assign" onclick="@assignFunctionCall " /> 
Verwandte Themen