1

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

我有一个名为 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");
    }

现在这是奇怪的部分。

我的所有字段(如标题、reportby 等)都按应有的方式填写,即它实际上包含我希望它包含的值——我填写到表单中的数据。当 ProjectID 实际上应该包含一个整数值时,它总是恰好为空。

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

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

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

4

1 回答 1

1

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

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

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

于 2012-04-26T13:11:59.810 回答