如何在JavaScript文件中混合使用Razor语法和JavaScript?

时间:2017-03-27 16:36:19

标签: razor asp.net-core

我需要在同一语句中使用Razor语法混合和匹配JavaScript和C#。我可能正在使用@:错误在Razor代码中编写JavaScript,因为Razor代码块中的最后一个表达式会破坏块之后的所有JavaScript。

var myVar = document.getElementById("myId");
var linkText = "someText";
var JSVar = X;  //X represents some number
@{
    int ID = JSVar;
    @:myVar.innerHTML = @Html.ActionLink(@:linkText, "Details", "Cards", new { Id = ID});
}

我也尝试将此作为没有代码块的单个表达式来实现,如下所示:

myVar.innerHTML = @Html.ActionLink(@:linkText, "Details", "Cards", new { Id = @:IdVar });

这也打破了以下JavaScript。

2 个答案:

答案 0 :(得分:1)

根据这个问题,您似乎希望在客户端与 JSVar 中的值合同 动态 链接即可。

如果是这样,您可以将JSVar附加到URL。例如,

<input id="txtValue" type="text" value="Stackoverflow" />
<a id="myId">Navigate to Page</a>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script type="text/javascript">
    $(function () {
        $("#myId").click(function () {
            var JSVar = $("#txtValue").val();
            location.href = "@Url.Action("About", "Home")/id=" + JSVar;
        });
    })
</script>

答案 1 :(得分:0)

我不认为这是可能的。我所做的(当我无法提出更好的替代方案时)是将隐藏变量(如href或模型值)存储在隐藏字段或div中,然后我可以通过javascript将其拉出。

你想要完成什么?可能有一种更优雅的方式来实现它?