2011-12-07 3 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> 

다음은 몇 가지 사항입니다. 첫째, 마크 업을 단순화합니다. 이것은 "못 생기지 않는"자바 스크립트로 알려져 있습니다. 그 이유는 모든 추악한 "onclick"과 다른 종류의 자바 스크립트 관련 이벤트를 제거하기 때문입니다.

두 번째로 마크 업에서 자바 스크립트 로직을 분리하여 관리하기가 쉽습니다.

또한 마크 업을 단순화하는 BeginForm HTML 도우미를 사용하고 있습니다. 블록 전체에 @ 기호가 하나만있는 것에 주목하십시오.

+0

이것은 훨씬 더 깔끔하고 유지 관리가 더 쉽습니다. +1 개선 제안을 만들기위한. – Leons

관련 문제