Reputation: 2951
So I'm trying to pass a parameter to a javascript function using the razor '@' notation (in an MVC-4 View) but I'm getting Syntax error: "Unterminated string constant"
Is there another way I should be writing this?
@foreach (var item in Model)
{
...
<input type="button" value="Assign" onclick="AssignButtonClicked('@item.ID')" />
}
I've used the same syntax as this answer https://stackoverflow.com/a/5179316/1662619
Edit:
It's just a syntax error, the functionality still works
Upvotes: 34
Views: 81208
Reputation: 133403
<input type="button" value="Assign" onclick="AssignButtonClicked(this)"
data-assigned-id="@item.ID" />
Further it can be fetched using
function AssignButtonClicked(elem){
var id= $(elem).data('assigned-id');
}
Upvotes: 43
Reputation: 1
To avoid this kind of issue, you may build all your js function call in c# code section.
Instead of:
<input type="button" value="Assign" onclick="AssignButtonClicked('@item.ID')" />
Use:
@{
var assignFunctionCall = "AssignButtonClicked(" + item.ID + ")";
}
<input type="button" value="Assign" onclick="@assignFunctionCall " />
Upvotes: 0
Reputation: 15387
try this
<input type="button" value="Assign"
onclick="@("AssignButtonClicked('"+item.ID+"')")" />
Upvotes: 14
Reputation: 3479
As alternative, you may use the other way to get @item.ID
in your jQuery function. Just add hiden span with it and get it's value in your function.
Say, you have list:
<ul>
@foreach (var item in Model)
{
...
<li> <input type="button" value="Assign" onclick="AssignButtonClicked()" />
<span class="hidenID">@item.ID</span>
</li>
}
</ul>
than in your script add:
<script>
$(document).ready(function(){
$('.hidenID').hide() //**hide your span
});
function AssignButtonClicked()
{
...
var id = $(this).closest('li').find('.hidenID').text();
...
}
</script>
But to my mind better approach for jQuery is as follows:
<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>
Upvotes: 2
Reputation: 8020
Try this,
<input type="button" value="Assign" onclick="AssignButtonClicked(@item.ID);" />
Script
<script type="text/javascript">
function AssignButtonClicked(obj) {
alert(obj);
return false;
}
</script>
Upvotes: 4
Reputation: 1938
You tried with:
<input type="button" value="Assign" onclick="AssignButtonClicked('@item.ID');" />
I added a semicolon at the end of javascript function call AssignButtonClicked('@item.ID');
Upvotes: 0