2013-12-16 3 views
0

Here is a picture of the error. 프로젝트를 일부 변경 한 후에이 오류가 표시됩니다. 버튼을 누르면 웹 사이트 사용자를 기록하기위한 컨트롤러로 이동하게됩니다. 부트 스트랩에 레이아웃을 다시 만들고 사이트에 속한 CSS의 변경/삭제를 많이했습니다. 이것은 관련이 있지만 확실하지는 않습니다. 버튼 코드는 다음과 같습니다.잡히지 않은 TypeError : null의 'submit'메서드를 호출 할 수 없습니다.

@if (Request.IsAuthenticated) { 
    <text> 
     Hello, @Html.ActionLink(User.Identity.Name, "Manage", "Account", routeValues: null, htmlAttributes: new { @class = "username", title = "Manage" })! 
     @using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { id = "logoutForm" })) { 
      @Html.AntiForgeryToken() 
      <a href="javascript:document.getElementById('logoutForm').submit()">Log off</a> 
     } 
    </text> 
} else { 
    <ul> 
     <li>@Html.ActionLink("Register", "Register", "Account", routeValues: null, htmlAttributes: new { id = "registerLink" })</li> 
     <li>@Html.ActionLink("Log in", "Login", "Account", routeValues: null, htmlAttributes: new { id = "loginLink" })</li> 
    </ul> 
} 

왜 이런 일이 일어날 지 알고 계십니까?

+2

getElementById ('logoutForm')'이 null 인 경우 양식이 존재하는지 확인하십시오. – Marthijn

+1

보기 원본을 사용하여 로그 오프 양식 dos에 ID가 렌더링되었는지 확인하십시오. – rene

+0

@Marthijn @rene 로그 오프가 양식에있는 것처럼 보입니다. 새로운 버전 : http://i.imgur.com/hKBdtty.png. 이전 버전에서는 CSS 파일에 다음 코드 줄이 있습니다.'#logoutForm { display : inline; }'. CSS를 읽거나 양식을 만들 수없는 것은 무엇입니까? – JazzMaster

답변

1

이 줄에 문제가 있다고 가정합니다.

@using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { id = "logoutForm" })) { 

페이지 소스를 확인하면 양식에 다음과 같은 조치가 취해질 것입니다.

action="Account/LogOff?id=logoutForm" 

솔루션 : 당신을 위해 그것을 수정해야합니다 :)

@using (Html.BeginForm("LogOff", "Account", null, FormMethod.Post, new { id = "logoutForm" })) { 

업데이트 :

당신은 그것을 다르게 작동하도록 주위의 코드를 전환,하지만 여전히 작업 할 수 있습니다.

옵션 1 :

레이아웃 파일의 끝에 붙여 넣으십시오.

<script>$(function() { 
    $('#logoutForm a').on('click', function() { 
      $('#logoutForm').submit(); 
    }); 
</script> 

옵션 2 :

변경하려면

<button type="submit">Log Off</button> <!-- no JavaScript --> 

옵션 3 태그 :

<!-- I think this will work --> 
<a onclick="document.getElementById('logoutForm').submit()">Log Off</a> 

나는 개인적으로 옵션 2처럼, 당신은 단지 버튼을 제출 사용하고 있기 때문에 JavaScript 대신에 당신이해야하는 것처럼.

업데이트 # 2 :

@using(Html.BeginForm("LogOff", "Account", null, FormMethod.Post, new { id = "logoutForm" }) { 
    @Html.AntiForgeryToken() 
    <button type="submit">Log Out</button> 
} 

생산해야 다음 행동와 속성방법의

<form action="/Account/LogOff" method="POST" id="logoutForm"> 
    <input type="hidden" name="__RequestVerification" value="***" /> 
    <button type="submit">Log Out </button> 
</form> 

를 적어 둡니다. 또한 텍스트 태그는 코드에서 제거해야합니다. 이는 Razor 구문이 Razor 구문이 아닌 텍스트 인 것처럼 받아들이도록하기 위해서입니다.

+0

답변 해 주셔서 감사합니다. 이것을 시도했지만 동일한 오류가 발생했습니다. – JazzMaster

+1

크롬 도구를 사용하여 "페이지를 검사"하여 form 태그에 대한 html을 붙여 넣을 수 있습니까? 양식 태그 만 있으면 도움이됩니다. –

+0

위의 설명에서 언급했듯이 로그 아웃에 대한 양식은 없습니다. 어떻게 보일 것인가 (구 버전)와 어떻게 보이는지 (새 버전) : http://i.imgur.com/hKBdtty.png. HTML 형식의 스크린 샷을 http://i.imgur.com/lyKmYe8.png 형식으로 가져 왔습니다. 게시 한 세 가지 방법을 모두 시도했지만 아무 것도 작동하지 않았습니다. 응답을 보내는 유일한 방법은 사이트를 새로 고치고 요청 확인 토큰이 포함 된 긴 URL을 제공하는 방법 2입니다. 다른 2는 "Uncaught TypeError : null의 submit '메서드를 호출 할 수 없습니다. – JazzMaster

관련 문제