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
If you can use JQuery .data()
<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');
}
try this
<input type="button" value="Assign"
onclick="@("AssignButtonClicked('"+item.ID+"')")" />
Try this,
<input type="button" value="Assign" onclick="AssignButtonClicked(@item.ID);" />
Script
<script type="text/javascript">
function AssignButtonClicked(obj) {
alert(obj);
return false;
}
</script>
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>
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');
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 " />