繁体   English   中英

在视图中将剃刀语法与Javascript混合

[英]Mixing razor syntax with Javascript in views

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

 <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,则您的Web应用程序将完全崩溃。 这就是为什么您应该始终编写语义正确的标记的原因。 在这种情况下,将使用锚,因为在HTML按钮用于提交表单时,锚用于重定向到其他位置(这正是您在此特定情况下要实现的目标)。

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

像这样:

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

Actionlink有很多替代,因此您需要选择一个适合您需要的替代。

上面的代码输出了a href,其中文本“ Resume”将在当前控制器上执行操作“ Test”,并传递testid = ViewBag.TestID的路由值

您可以这样做:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM