Ajax .BeginForm在IE9中返回空白视图

时间:2013-02-13 03:24:26

标签: javascript asp.net-mvc razor internet-explorer-9 ajax.beginform

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特有的?

1 个答案:

答案 0 :(得分:0)

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

 </div>

未注释掉的结束标记。当我删除它时问题清除了。叹了口气,浪费了几个小时。我开始删除整个令人尴尬的POST,但决定放弃它,希望别人可以从我的愚蠢中吸取教训。