使用Razor语法的ASP.NET MVC编译错误

时间:2011-12-07 03:07:53

标签: asp.net-mvc-3 razor

以下代码段导致编译错误,我无法查明。我试着从最后一个支架上取下2。我没有用括号试过AntiForgery - 没有运气。

错误是CS1501:方法'Write'没有重载需要0个参数

有什么建议吗?

<div id="header-wrapper">
    <div id="header">
        <div id="menu-wrapper">
            @if (Page.User.Identity.IsAuthenticated){
                @Html.Telerik().Menu().Name("mainnav").BindTo("main").Effects(x => x.Toggle())
            }     
        </div>
        @if (Page.User.Identity.IsAuthenticated){
            <form action="@Url.Action("Logoff", "Account")" id="formLogout" method="POST">
                @{ Html.AntiForgeryToken(); }
                <a href="" id="logout" onclick="$('#formLogout').submit();return false;"></a>
            </form>
        @}
        <div id="subnav"></div>
    </div>
</div>

enter image description here

2 个答案:

答案 0 :(得分:1)

尝试更换:

@{ Html.AntiForgeryToken(); }

使用:

@Html.AntiForgeryToken()

(并从@右括号中删除if

代码应该是:

@if (Page.User.Identity.IsAuthenticated) {
  <form action="@Url.Action("Logoff", "Account")" id="formLogout" method="POST">
    @Html.AntiForgeryToken()
    <a href="" id="logout" onclick="$('#formLogout').submit();return false;"></a>
  </form>
}

答案 1 :(得分:1)

由于Chris回答了您的问题,我想指出您的代码的一些改进。你的代码可以用这种方式编写:

@if (Page.User.Identity.IsAuthenticated){
 using (Html.BeginForm("Logoff", "Account", FormMethod.Post, new { id="formLogout" }) {
     Html.AntiForgeryToken();
     <a href="" id="logout">Logout</a>
 }
}

<script type="text/javascript">
    $(function() {
        $('#formLogout').click(function() { 
            $('#formLogout').submit(); return false; 
        });
    }};
</script>

这做了一些事情。首先,它简化了标记。这被称为“不引人注目的”javascript,因为它删除了所有那些丑陋的“onclick”和其他类型的javascript相关事件。

其次,它会从您的标记中分离您的javascript逻辑,使其更易于维护。

另请注意,我正在使用BeginForm html帮助程序,这也简化了标记。请注意整个块中只有一个@符号?