19

Tak więc próbuję przekazać parametr do funkcji javascript za pomocą notacji maszynki "@" (w widoku MVC-4), ale jestem błąd składniowy: "Niezapośredniczona stała ciągu"jak przekazać wartość brzytwy do funkcji jquery, w widoku mvc

Czy istnieje inny sposób, w jaki powinienem to napisać?

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

Użyłem tej samej składni jak ta odpowiedź https://stackoverflow.com/a/5179316/1662619

Edit:

to tylko błąd składni, funkcjonalność nadal działa

+0

Rozwiązanie: - usunąć pojedynczy cytat wokół @ item.ID – Kings

Odpowiedz

26

Jeśli można użyć JQuery.data()

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

Ponadto może on być pobierany z wykorzystaniem

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

To całkiem fajne rozwiązanie, dzięki – Jimmy

0

Próbowano z:

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

Dodałem średnik na końcu funkcji javascript n nazywamy AssignButtonClicked('@item.ID');

+0

owszem, nadal ten sam błąd błąd składni – Jimmy

+0

składni. Mine to 'onclick =" javascript: alert ('@ Model.username.ToString()'); " ' –

2

Spróbuj tego,

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

Script

<script type="text/javascript"> 

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

nadal daje taki sam błąd składniowy: – Jimmy

+0

@Jim Barton Doskonale działa na moim projekcie. Możesz pokazać kod dla pętli foreach. – Jaimin

+0

Znacznik wejściowy znajduje się wewnątrz znacznika wejściowego , jeśli to robi różnicę? Reszta pętli składa się z @ Html.DisplayFor (modelItem => item.Forename) wiersze itp .. – Jimmy

2

Jako alternatywę, można użyć innego sposobu, aby uzyskać @item.ID w funkcji jQuery. Po prostu dodaj hiden span i uzyskaj jego wartość w swojej funkcji.

Say masz listę:

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

niż w skrypcie dodać:

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

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

</script> 

Ale moim zdaniem lepszym rozwiązaniem dla jQuery jest następujący:

<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

spróbować ten

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

Aby uniknąć tego rodzaju problemu, można zbudować całą swoją js wywołanie funkcji w punkcie C# kodu.

Zamiast:

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

użytkowania:

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