为什么预期值仅在我在调试模式下运行代码时出现,但在不调试时中断,以及如何解决此问题

Why does expected values only occur when I run my code in debug mode, but breaks when I aren't debugging, and how can I fix this?

本文关键字:调试 中断 问题 何解决 解决 模式 为什么 代码 运行      更新时间:2023-09-26

我对以下代码感到头疼,想知道是否有人可以帮助我。

我有一个名为 Details.aspx 的视图,位于一个名为 project 的文件夹中。在详细信息视图中,我有以下关键代码片段,这让我头疼。

<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>

然后我还有一些Javascript可以与我的控制器交谈,称为IssueController,方法称为AddIssue

<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");
    }

现在这是奇怪的部分。

我的所有字段(如标题、报告者等)都按原样填写,即它实际上包含我希望它包含的值 - 我填写到表单中的数据。ProjectID 总是恰好为 null,而它实际上应该包含一个整数值。

当我在浏览器中激活javascript上的调试器时,我看到ProjectID确实被填充了,如果我添加了以下代码Alert(Global_ProjectID);,它还给了我一个弹出窗口,其中包含我需要的值。

但是,当我在没有调试的情况下运行这些代码段时,ProjectID 始终为 null。可悲的是,这是一个我必须反复使用的值,而 null 根本行不通

我该怎么做才能修复此代码?我让其他程序员看过它,他们也和我一样难倒。

我建议研究Javascript范围和提升 - JS在变量和函数初始化顺序方面并不总是以您期望的方式运行。

您可以通过调整IssueSubmitForm函数以接受ProjectID作为参数来解决此问题,并在提交按钮上使用onclick="return IssueSubmitForm(Global_ProjectID)"...

或者更好的是,删除内联函数调用并在页面加载到$(document).ready()事件后绑定提交事件。