在视图中使用Javascript混合剃刀语法

时间:2013-07-02 06:46:48

标签: javascript asp.net-mvc razor

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

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

4 个答案:

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