私はこの次のコードでひどい頭痛の種のセッションをしていて、誰かが私を助けることができるかどうか疑問に思っていました。
ProjectというフォルダにあるDetails.aspxというビューがあります。詳細ビュー内に、次のキーコードスニペットがあり、頭痛の種になっています。
<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">
)の中には、次のコードがあります。
<p>
<input type="submit" class="submit small" value="Add Issue" onclick="return IssueSubmitForm()"/>
or <a href="">cancel</a></p>
次に、AddIssueというメソッドを使用して、IssueControllerというコントローラーと通信するJavascriptをもう少し用意しました。
<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>
これにより、フォームに入力された情報(さまざまなWebコントロールから)と、Global_ProjectIDからの値が取得されます。
私のコントローラーでは、次のメソッドは私のjavascriptから呼び出されるものです
[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");
}
今ここに奇妙な部分があります。
すべてのフィールド(タイトル、reportedbyなど)は、必要に応じて入力されます。つまり、実際には、フォームに入力したデータであると予想される値が含まれています。ProjectIDは、実際には整数値を含む必要がある場合でも、常にnullになります。
ブラウザのJavaScriptでデバッガをアクティブにすると、ProjectIDが入力されていることがわかりました。次のコードを追加するAlert(Global_ProjectID);
と、必要な値のポップアップも表示されました。
ただし、デバッグせずにこれらのコードセグメントを実行した瞬間、ProjectIDは常にnullになります。悲しいことに、それは私が繰り返し使用しなければならない値であり、nullは単純に機能しません
このコードを修正するにはどうすればよいですか?私は他のプログラマーにそれを見てもらいました、そして彼らも私と同じように困惑していました。