正确的方法是什么。我需要它像下面的例子一样工作。
<input type="button" value="Resume" onclick="window.location = '/Test?testid=@(ViewBag.TestID)'" />
答案 0 :(得分:4)
我绝对支持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按钮中用于提交表单,锚点用于重定向到其他位置(这正是您在此特定情况下尝试实现的目标)。
答案 1 :(得分:1)
我会像Zabavsky所说的那样使用ActionLink:
这样的事情:
@Html.ActionLink("Resume", "Test", new { testid = ViewBag.TestID })
actionlink有很多覆盖,所以你需要选择一个符合你需求的覆盖。
上面的一个输出一个href,文本'Resume'在当前控制器上执行'Test'动作,传递一个路由值testid = ViewBag.TestID
答案 2 :(得分: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>
希望它会有所帮助。感谢。
答案 3 :(得分:0)
嗯,你写的是有效的。 你可能有VS用红色强调你的代码,因为它认为你有一个js错误,因为''字符串没有结束......但如果你运行它,它就可以了。
为避免红色下划线,您可以这样做:
@{string js = "window.location = '/Test?testid="+ViewBag.TestID+" '";}
<input type="button" value="Resume" onclick="@js" />