为什么我的操作从ajax.beginform调用的部分视图没有出现在页面上?

时间:2016-08-11 16:06:40

标签: javascript jquery ajax asp.net-mvc

我有一个包含viewmodel的页面,在页面上单击按钮提交ajax表单:

@using (Ajax.BeginForm("finalstatus", "User", null, new AjaxOptions
                {
                    HttpMethod = "POST",
                    OnSuccess = "popupappear()",

                }, new { id = "progForm"}))
                {
                    @Html.HiddenFor(Model => Model.SectionID)
                    @Html.HiddenFor(Model => Model.CourseID)
                }

这使用控制器操作:

[HttpPost]
    public ActionResult finalstatus(SubSectionViewModel model)
    {

        string currentuser = User.Identity.GetUserId();

        var viewModel = db.enrollment
            .Where(i => i.UserID == currentuser)
            .Where(i => i.course.CourseID == model.CourseID)

            .Select(x => new CurrentProgressViewModel
            {

                ovpcnt = (int)Math.Round((double)(100 * x.progress.Sum(c => c.progress)) / x.course.course_sections.SelectMany(i => i.course_subsections).Sum(c => c.scenes)),

            }).Single();


        return PartialView("_endofsection", viewModel);

    }

这应该计算用户的进度百分比并在部分视图中返回该百分比" _endofsection"到页面。局部视图使用保持百分比的CurrentProgressViewModel。

一切似乎都有效,但部分视图似乎没有加载到页面上,我可以看到它正在谷歌浏览器的网络选项卡中正确访问和预览。但是它不会出现在表单所在的页面上,这是我希望加载部分视图的地方。

我在这里缺少什么?为什么这不出现?

此外,表单成功提交时调用的onsuccess函数似乎仅在第二次单击时调用,但这是次要问题。

1 个答案:

答案 0 :(得分:1)

您正在使用Ajax.BeginForm辅助方法进行ajax调用。因此,您需要指定在DOM中替换(ajax调用)的响应。您可以使用UpdateTargetId属性指定该属性。它应该是您想要添加从ajax调用返回的响应的元素的ID。

您还需要提交按钮才能提交表单。

这应该可以正常运行,假设您的操作方法正确返回部分视图结果而没有任何错误。

<div id="YourDivToShowResult"></div>

@using (Ajax.BeginForm("finalstatus", "User", null, new AjaxOptions
{
    HttpMethod = "POST",
    OnSuccess = "popupappear()",
    InsertionMode = InsertionMode.Replace,
    UpdateTargetId = "YourDivToShowResult"

}, new { id = "progForm" }))
{
    @Html.HiddenFor(Model => Model.SectionID)
    @Html.HiddenFor(Model => Model.CourseID)

    <input type="submit"/>
}