2011-12-07 21 views
1

次のコードスニペットは、コンパイルエラーの原因となり、正確に特定できません。私は最後のブレースから2を取り除こうとしました。私は中括弧なしでAntiForgeryを試しました - 運はありません。Razor構文のASP.NET MVCコンパイルエラー

誤差がCS1501です:メソッドのオーバーロードなし「書き込みは」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

答えて

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> 
} 
+0

それがうまくいった!私はすでにそれを試みたと確信していたが、明らかにそうではなかった。 – Leons

1

クリスは、あなたの問題に答えているので、私はあなたのコードにいくつかの改善を指摘したいと思います。あなたのコードは次のように書くことができます:

@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関連イベントを取り除くからです。

第2に、マークアップからJavaScriptロジックを分離して維持しやすくします。

私はBeginForm htmlヘルパーを使用していますので、マークアップも簡単にできます。ブロック全体に@記号が1つしかないことに注目してください。

+0

これはとても清潔で、維持管理が簡単です。改善提案をするための+1。 – Leons

関連する問題