1

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

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

4 回答 4

4

我绝对支持 Zabavsky 的评论,即您应该在此特定示例中使用 ActionLink 以获得语义正确的标记。

但既然你问:

在视图中将 razor 语法与 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 中按钮用于提交表单,锚点用于重定向到其他位置(这正是您在这种特定情况下试图实现的目标)。

于 2013-07-02T07:10:26.750 回答
1

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

像这样的东西:

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

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

上面的输出一个带有文本'Resume'的a href,将在当前控制器上执行'Test'操作,传递一个testid = ViewBag.TestID的路由值

于 2013-07-02T06:54:33.760 回答
0

你可以这样做:

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

希望它会有所帮助。谢谢。

于 2013-07-02T06:57:26.140 回答
0

嗯,你写的是有效的。您可能让 VS 用红色在您的代码下划线,因为它认为您有一个 js 错误,因为 '' 字符串没有结束......但是如果您运行它,它就可以工作。

为避免出现红色下划线,您可以这样做:

@{string js = "window.location = '/Test?testid="+ViewBag.TestID+"    '";}
<input type="button" value="Resume" onclick="@js" />
于 2013-07-02T07:03:48.803 回答