在视图中混合使用razor语法和Javascript

Mixing razor syntax with Javascript in views

本文关键字:razor 语法 Javascript 视图 混合      更新时间:2023-09-26

正确的方法是什么。我需要它像下面的例子一样工作。

 <input type="button" value="Resume" onclick="window.location = '/Test?testid=@(ViewBag.TestID)'" />

我绝对支持Zabavsky的评论,即您应该为这个特定的示例使用ActionLink,以便具有语义正确的标记。

但既然你问:

在视图中混合剃刀语法和Javascript

永远不要那样做。

在你看来,你应该只有标记:

<input type="button" value="Resume" id="myButton" data-url="@Url.Action("Test", new { testid = ViewBag.TestID })" />

和javascript(在一个单独的文件中),您可以在其中使用此标记并不引人注目地增强它:

$(function() {
    $('#myButton').click(function() {
        window.location.href = $(this).data('url');
    });
});

当然,如果用户禁用了javascript,你的网络应用程序就会完全崩溃。这就是为什么您应该始终编写语义正确的标记。在这种情况下,这将是使用锚,因为在HTML中,按钮用于提交表单,锚用于重定向到其他位置(这正是您在这种特定情况下试图实现的)。

正如Zabavsky所说,我会为此使用ActionLink:

类似这样的东西:

@Html.ActionLink("Resume", "Test", new { testid = ViewBag.TestID })

actionlink有很多覆盖,所以你需要选择一个适合你需要的。

上面的一个输出一个a href,文本为"Resume",将在当前控制器上执行操作"Test",通过testid=ViewBag.testid 的routevalue

你可以这样做:

<html><head><script>function newDoc()  {   window.location.assign("http://www.abc.com")  }</script></head><body><input type="button" value="Load new document" onclick="newDoc()"></body></html>

希望它能有所帮助。谢谢

好吧,你写的是有效的。你可能让VS在你的代码下面用红色下划线,因为它认为你有一个js错误,因为"字符串没有结束。。。但如果你运行它,它会起作用。

为了避免红色下划线,您可以执行以下操作:

@{string js = "window.location = '/Test?testid="+ViewBag.TestID+"    '";}
<input type="button" value="Resume" onclick="@js" />