1

私はこの次のコードでひどい頭痛の種のセッションをしていて、誰かが私を助けることができるかどうか疑問に思っていました。

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は単純に機能しません

このコードを修正するにはどうすればよいですか?私は他のプログラマーにそれを見てもらいました、そして彼らも私と同じように困惑していました。

4

1 に答える 1

1

Javascript Scoping and Hoistingを調べることをお勧めします - JS は、変数と関数が初期化される順序に関して、常に期待どおりに動作するとは限りません。

関数をパラメーターとしてIssueSubmitForm受け入れ、送信ボタンで使用するように調整することで、おそらく問題を回避できます...ProjectIDonclick="return IssueSubmitForm(Global_ProjectID)"

または、インライン関数呼び出しを削除し、ページがイベントに読み込まれた後に送信イベントをバインドします $(document).ready()

于 2012-04-26T13:11:59.810 に答える