私はこのようなカミソリ構文を持っています:
foreach(var item in model)
{
<td><a href ="#" onclick="Getinfo(@item.email);" >6/16/2016 2:02:29 AM</a> </td>
}
リクエストを受信する私のJavaScriptは次のようになります:
<script type="text/javascript" src="~/Scripts/jquery-1.9.1.js"></script>
<script type="text/javascript">
function Getinfo(elem) {
var email = document.getElementById(elem).innerHTML;
}
</script>
Hrefリンクをクリックすると、ブラウザのコンソールに次のエラーが表示されます。
「Uncaught SyntaxError:無効または予期しないトークン」、
この部分には下線が引かれています:
**</a> </td>**
私は初心者なので、多くの構文にこだわっています。それがそれなら私を助けてください。
@item.email
を引用符で渡すと、文字列引数として扱われます
<td><a href ="#" onclick="Getinfo('@item.email');" >6/16/2016 2:02:29 AM</a> </td>
そうでない場合、変数として扱われ、エラーが生成されます。
受け入れられた回答は、1行の文字列(電子メール)がある場合に機能しますが、
複数行の文字列、エラーが残ります。
この問題を調べてください:
<!-- start: definition-->
@{
dynamic item = new System.Dynamic.ExpandoObject();
item.MultiLineString = @"a multi-line
string";
item.SingleLineString = "a single-line string";
}
<!-- end: definition-->
<a href="#" onclick="Getinfo('@item.MultiLineString')">6/16/2016 2:02:29 AM</a>
<script>
function Getinfo(text) {
alert(text);
}
</script>
以下のようにGetinfoで一重引用符( ')をbacktick( `)に変更すると、エラーが修正されます。
<a href="#" onclick="Getinfo(`@item.MultiLineString`)">6/16/2016 2:02:29 AM</a>
このシナリオでは、複数行の文字列にも問題がありました。 @Imanのbacktick( `)ソリューションは、最新のブラウザーではうまく機能しましたが、Internet Explorerでは無効な文字エラーが発生しました。次のものを使用する必要がありました。
'@item.MultiLineString.Replace(Environment.NewLine, "<br />")'
それから、js関数にキャリッジリターンを再度配置する必要がありました。 RegExを使用して複数のキャリッジリターンを処理する必要がありました。
// This will work for the following:
// "hello\nworld"
// "hello<br>world"
// "hello<br />world"
$("#MyTextArea").val(multiLineString.replace(/\n|<br\s*\/?>/gi, "\r"));