2012-04-23 1 views
1

다음 코드로 뚱뚱한 두통 세션을 겪고 있는데 누군가가 나를 도울 수 있는지 궁금해하고있었습니다.예상 값은 디버그 모드에서 코드를 실행할 때만 발생하지만 디버깅하지 않을 때 중단되며 어떻게 해결할 수 있습니까?

프로젝트라는 폴더에 Details.aspx라는보기가 있습니다. 자세히보기 내부에는 다음과 같은 핵심 코드가있어 두통을 겪고 있습니다.

 <p> 
      <input type="submit" class="submit small" value="Add Issue" onclick="return IssueSubmitForm()"/> 
      or <a href="">cancel</a></p> 

그리고 내가

<script type="text/javascript"> 
    var PostBackUrl = "<%:ResolveUrl("~/Issue/AddIssue")%>"; 

    //Front-end Validation here 

    function IssueSubmitForm() { 
     var PostBackData = { 
      Title: $("input[name=Title]").val(), 
      Details: $("textarea[name=Details]").val(), 
      ReportedBy: $("input[name=ReportedBy]").val(), 
      Priority: $("select[name=Priority]").val(), 
      ProjectID: Global_ProjectID 
     }; 

     $.post(PostBackUrl,PostBackData); 
    } 
</script> 
AddIssue

라는 방법으로, IssueController라는 내 컨트롤러에 얘기를 좀 더 자바 스크립트가 있습니다

양식 태그 내부
<script type="text/javascript"> 
var Global_ProjectID = <%:Model.ProjectID%>; //Gets the project ID from Project Table In model 
</script> 

(<form action="<%: ResolveUrl("~/Issue/AddIssue") %>" method="post">는) 다음 코드를 상주

다양한 웹 컨트롤의 양식에 입력 된 정보와 Global_ProjectID의 값을 가져옵니다.

내 컨트롤러에서

는 다음과 같은 방법은

[HttpPost] 
    public ActionResult AddIssue(Models.Issue issue) 
    { 
     Models.Issue newIssue = new Models.Issue() 
     { 
      Title = issue.Title, 
      DateLogged = DateTime.Now, 
      Status = 0, 
      ReportedBy = issue.ReportedBy, 
      Priority = issue.Priority, 
      ProjectID = issue.ProjectID, 
     }; 
     return View("SomeOtherViewSomewhere"); 
    } 

지금 여기에 이상한 부분입니다 내 자바 스크립트에서 호출되는 하나입니다.

내 모든 필드 (예 : title, reportedby 등)는 필자가 입력해야하는대로 채워집니다. 즉, 실제로 양식에 채운 데이터가 포함될 것으로 예상됩니다. ProjectID는 실제로 정수 값을 포함해야하는 경우 항상 null입니다.

내 브라우저에서 내 자바 스크립트에 디버거를 활성화하면 ProjectID에 채워지는 것을 알았고 다음 코드를 추가 한 경우 Alert(Global_ProjectID); 코드를 사용하여 필요한 값으로 팝업됩니다.

그러나 이러한 코드 세그먼트를 디버깅하지 않고 실행하면 ProjectID는 항상 null입니다. 그것은 슬프게도 반복적으로 사용해야하는 값이며, null은 단순히 수행하지 않을 것입니다.

이 코드를 수정하려면 어떻게해야합니까? 나는 다른 프로그래머들도 그것을 보았고, 그들은 내가 그랬던 것만 큼 혼란 스러웠다.

+0

지금은 백만 가지를 시도했습니다. 폼 태그에서 액션을 제거하면 컨트롤러 메소드가 실행되지 않고 내가 가지고있는 것과 같은 페이지가 되돌려 보내집니다. $ .post 앞에 경고를 남기면 모든 시간이 필요합니다. 데이터베이스에 값을 저장할 때 임의로 값이 표시되거나 null 인 경우 (이상한 이유로) – Eon

+0

을 다시 결정합니다. 또 다른 tumbleweed가 나타납니다. 담배를 피울 수 있습니다. < – Eon

답변

1

Javascript Scoping and Hoisting을 살펴 보는 것이 좋습니다. JS가 변수 및 함수가 초기화되는 순서와 관련하여 항상 기대 한대로 동작하지는 않습니다.

당신은 아마 매개 변수로 ProjectID을 허용하도록 IssueSubmitForm 기능을 조정하여 문제를 해결하고 제출 버튼을 onclick="return IssueSubmitForm(Global_ProjectID)"을 사용할 수 있습니다 ...

또는 더 나은, 인라인 함수 호출을 제거하고 제출 바인드 이벤트가 페이지가 $(document).ready() 이벤트로로드 된 후

+0

오랫동안 복용하면 죄송합니다. 몇 가지 나쁜 결과가 나오는 자바 스크립트가 있음이 밝혀졌습니다. 방금 stackoverflow에 대한 답변을 확인하는 것을 잊었습니다. 나는 내가 기억하는 한 당신이 제안한 것과 거의 같았다. 감사합니다. – Eon

관련 문제