提交按钮不会触发通过ajax添加的项目

时间:2014-07-03 15:33:38

标签: c# jquery ajax asp.net-mvc razor

我有一个mvc视图,其中包含一个项目列表。使用局部视图显示每个项目。用户可以编辑,添加和删除列表中的项目。所有这一切都有效。

但是,如果用户添加项目,则在刷新页面之前无法编辑该项目。当用户选择提交按钮时,不会发生帖子。 Chrome开发工具中没有显示任何网络活动 - 没有任何反应。

输出html与初始页面加载中包含的项目和通过ajax添加的项目相同。

<form action="/booking/UpdateRoomFlow" data-ajax="true" data-ajax-method="POST" data-ajax-success="update_27365547" id="roomflowform_27365547" method="post" novalidate="novalidate"></form>

我注意到当我在chrome中检查元素时,表单不会包装表单字段,但是当我查看视图源时,它会这样做。

我尝试过使用Ajax.BeginForm并尝试自己编写html,但结果相同。

这是Ajax.BeginForm ......

 @using (Ajax.BeginForm(
    "UpdateRoomFlow",null,
    new AjaxOptions
    {
        HttpMethod = "POST",
        OnSuccess = targetfunction
    },
        new { @id = @formid, @novalidate = "novalidate"}))
    {

有什么想法吗?

编辑:需要注意的事项 - 此表单放在td标记上方的tr标记内,这可能会导致问题,因为这是无效标记 - 但是,除了通过ajax调用添加的项目之外,它在所有情况下都有效。

1 个答案:

答案 0 :(得分:0)

HTML AJAX响应中包含的

<script>标记被剥离,并且由于Ajax.BeginForm将脚本标记添加到HTML以启用它的功能,因此您最终会得到一个不执行任何操作的常规旧表单。由于浏览器出于安全原因剥离<script>标记,因此您无法做到这一点。您唯一的办法是停止使用Ajax.BeginForm并编写自己的JS来处理AJAX提交,然后您可以将其包含在主视图中或不受影响的外部文件中,这无论如何都不是一个坏主意。由于这样的原因,Ajax.*助手系列糟糕