javascript - 提交 Ajax 表单但没有发送到 Controller ?

标签 javascript jquery ajax asp.net-mvc entity-framework

我在我的 View 中使用以下 viewModel:

public class CourseViewModel
{
    public IEnumerable<Course_page> Course_page { get; set; }
    public IEnumerable<course_section> Course_section { get; set; }
    public IEnumerable<course_subsection> Course_subsection { get; set; }
    public IEnumerable<Enrollment> Enrollments { get; set; }
}

在我看来,我有以下 ajax 形式:

@using (Ajax.BeginForm("updateprogress", "User", new { EnrollmentID = Model.Enrollments.Single().EnrollmentID }, new AjaxOptions
            {
                HttpMethod = "POST",

            }, new { id = "ajaxForm" }))
            {
                @Html.HiddenFor(Model => Model.Enrollments.Single().progress1, new { id = "scenecheck" })
            }

我有一个由名为 Hype 的程序生成的动画,动画中包含场景,并且使用 JavaScript 函数调用当前场景编号,并在“progress1”字段中填充上面表单的值:

function updateprogress(hypeDocument, element, event) {

var scenenumber = hypeDocument.currentSceneName();

hypeDocument.getElementById('scenecheck').value = scenenumber;

$('form#ajaxForm').submit();

}

我还有一些其他的 javascript,它可以监听场景变化,并在场景发生变化时调用上面的函数。

当我在页面上将 HiddenFor 更改为 TexboxFor 时,我可以看到 View 中的一切都正常工作,场景编号出现在文本框中。

提交此表单时我的 Controller 操作如下:

[Authorize]
    [HttpPost]
    public ActionResult updateprogress(int EnrollmentID, CourseViewModel model)
    {
        Enrollment enrollment = db.enrollment.Find(EnrollmentID);
        Mapper.Map(model, enrollment);
        db.SaveChanges();

        return null;


    }

我正在使用 Automapper 将 View 模型的更改映射回实际模型, View 模型中只有一个字段需要更改。这可能不是理想的方法,我仍在尝试找出应该如何解决这个问题。

我的两个问题是:

1 - 表单在提交时似乎没有将任何内容传递回 Controller 。所以“模型”对象是空的,null。这让我相信我认为我对自己所做事情的理解是错误的。为什么更新后的字段没有传回 Controller ?

2 - 这是更新 View 模型中单个字段的值的最佳方法吗?

谢谢

最佳答案

您有一个非常复杂的模型,内部模型绑定(bind)器不会知道如何处理它,因为您有一个对象的 IEnumerable 并且您正在编辑(或在本例中隐藏) ) 第一个注册progress1。您必须创建一个自定义模型绑定(bind)器。

View 上发生的情况是它存储了 progress1 这个输入标记,但是当 Controller 获取它时,它不会知道它属于哪个 Enrollment 对象.

尝试将第一个 Enrollment 传递到您的 View 中进行编辑。

关于javascript - 提交 Ajax 表单但没有发送到 Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38397864/

相关文章:

javascript - 你如何获得鼠标的位置并在其旁边放置一个元素?

javascript - .addEventListener 与 .onclick

javascript - 根据变量的值范围,是否有比使用 if-else 语句更快/更有效的方法来调用不同的函数?

javascript - 在 OPTIONS 响应后使获取 API 与 CORS 一起工作

javascript - 如何获取字符串变量中具有特定类名的所有范围

php - 保存和加载页面的ajax状态

javascript - AJAX 问题处理响应数据显示

jquery - 根据非相关实体动态更改文本字段值

javascript - 如何使用 requirejs 来处理 ajax 回调?

c# - MVC Ajax 防止重定向到 Action Controller