1

MVC4 C#

我在整个应用程序中都使用 Ajax.BeginForm,它运行良好。当我创建并测试 ChkNum 视图时,它工作得很好。突然它停止工作了,我不知道为什么。它在其他视图中仍然有效,但在 ChkNum 视图中,当 post 操作中的 ModelState.IsValid 测试失败并返回视图时,返回的页面是空白的(我得到页眉和页脚但没有正文)。适当的脚本随站点一起加载并在所有其他视图中工作。

ChkNum 视图:

@model ModelVM
@{ ViewBag.Title = "Title"; } 
<script type="text/javascript">
    var onSuccess = function (result) {
        if (result.url) {
            window.location.href = result.url;
        }
    }
</script>

<div id="CkNmFrm">
    @Html.ValidationSummary(true)    <h2>Page Title</h2>
    <span class="h5-sty">Field1: @Model.Field1  Field2: @Model.Field2</span><br />
    @using (Ajax.BeginForm("ChkNum", new AjaxOptions() {OnSuccess = "onSuccess", UpdateTargetId = "CkNmFrm", HttpMethod = "Post"}))
    {
        @Html.AntiForgeryToken()
        <br />
        <span class="h4-sty">Field3: </span>
        <span class="ebwid">@Html.EditorFor(m => m.Field3) </span>
        @Html.ValidationMessageFor(m => m.Field3)<br /><br />
        <span><input type="submit" value="Submit" /></span>
        <br /><br />
    }
</div>

ChkNum 动作:

public ActionResult ChkNum(int id)
{
    // code to build vM
    return View(vM);
}

[HttpPost, ValidateAntiForgeryToken]
public ActionResult ChkNum(ModelVM vM)
{
    if (ModelState.IsValid)
    {
        //code 
    }

    ModelState.AddModelError(string.Empty, "Fix Error");
    return PartialView("ChkNum", vM);
}

我已经检查了几次代码并将其与工作操作和视图进行了比较,并没有发现任何问题。我在返回的 PartialView 处设置了一个断点,它正确地通过了 CkNmFrm。

我想不出我在应用程序中更改的任何其他可能导致此问题的内容。

在我的智慧结束这一点。非常感谢任何帮助。

更新: 我使用的是 IE 9。我刚刚在 Chrome 中尝试过,问题就消失了。所以现在的问题是为什么它在除 ChkNum 之外的多个视图中都有效,而且问题是 IE 特有的?

4

1 回答 1

0

我终于找到了问题所在。在视图的最后,我有一大块注释掉的代码 (@* *@)。正中间那是一个

 </div>

未注释掉的结束标记。当我删除它时,问题就解决了。叹息,浪费了几个小时。我开始删除整个令人尴尬的帖子,但决定保留它,希望其他人可以从我的愚蠢中吸取教训。

于 2013-02-13T16:21:22.410 回答