34

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

2
  • Solution:- remove the single quotation around @item.ID Commented Nov 17, 2014 at 21:59
  • Instead of single-quotation, it's better to use of backtick(`) in javascript. this answer completely describes it. backticks in razor pages Commented Jan 5, 2019 at 20:27

6 Answers 6

43

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');
}
Sign up to request clarification or add additional context in comments.

Comments

14

try this

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

1 Comment

This answer worked for me, all though it was very painful to actually commit this code because readability is -10!
4

Try this,

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

Script

<script type="text/javascript">

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

3 Comments

@Jim Barton It's perfectly working on my project.Can you show some code for foreach loop.
The input tag is inside a <tr> <td> <input... /> </td> </tr> if that makes a difference? The rest of the loop just consists of <td> @Html.DisplayFor(modelItem => item.Forename)</td> rows etc..
@Jim Barton unterminated string constant is beacause of missing a closing quotation mark.pretty sure you have made some mistake in the syntax.Check your tableand your foreach loop i think you missing some tr,td or some tag.
2

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>

Comments

0

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');

1 Comment

Syntax error. Mine is onclick = "javascript:alert('@Model.username.ToString()');"
0

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 " />

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.