Ajax.BeginForm在FireFox中无法正常工作(只提交一次Post)

本文关键字:提交 BeginForm Post 一次 工作 FireFox Ajax 常工作 | 更新日期: 2023-09-27 18:26:09

我正在使用Ajax。以部分视图开始表单,以替换已定义目标的内容。

像这样,

局部视图:

@model string
   <fieldset style="width:916px">
        <legend class="SearchFiledSet">AMN</legend>
        <table>
          <tr valign="top">
           <td>Notes:&nbsp</td>
           <td>@Html.TextArea("Notes", @Model, 5, 30, new { disabled = "disabled", style = "background: #FFF; border: 1px solid #000;" })</td>
           @using (Ajax.BeginForm("AMN", new AjaxOptions { UpdateTargetId = "AMN",
                                                                                                    Url = Url.Action("AMN"),
                                                                                                    OnBegin = "OnBegin",
                                                                                                    OnFailure = "OnFailure",
                                                                                                    OnSuccess = "OnSuccess",
                                                                                                    OnComplete = "OnComplete"}))
           {
             <td style="padding-left: 30px">P N: &nbsp @Html.TextBox("PN", "", new { size = "15" })
              @if(string.IsNullOrEmpty(@Model))
               {
                 <br />
                  <font color="red">No matching pn was found in the system.</font> 
               }
             </td>
             <td style="padding-left: 60px">
                   <button type = "submit">Search</button>
             </td>
           }
          </tr>
        </table>
   </fieldset>

控制器:

        public PartialViewResult AMN(string PN = null)
    {
        IPS p=null;
        string remarks= " ";
        if (PN != null)
        {
            p = _pS.GetPPN.Trim());
            remarks = p != null ? p.Remarks : remarks;
        }
        return PartialView(((object)remarks));
    }

主视图:

 <div id="AMN" style="margin-left: 180px">
    @Html.Action("AMN")
 </div>

Ajax调用在IE中当然可以正常工作,但在Firefox中,它会在第一次提交时到达控制器上的断点并正确发布,但在每次连续提交后都不会发生任何事情。甚至连断点都不会被击中。几年前,我看到过其他一些人抱怨同样的问题的帖子,但没有一个得到解决。有没有人经历过这个问题,找到了解决方案,或者对这个问题有任何建议?

主页上还有另一个Html.BeginForm,我将部分视图链接到它,但我的部分视图在该表单之外,我还尝试删除另一个表单,只留下ajax表单,但没有成功。

我使用的是jquery-1.7.2

Ajax.BeginForm在FireFox中无法正常工作(只提交一次Post)

我想我现在基于对该主题的一般研究而不是将其引导到Ajax.BeginForm方法来理解正在发生的事情。我想基本上模仿面板的概念,并且能够插入完整的形式,并在ajax调用中用更新的数据替换面板(部分视图)。我对ajax或javascript没有那么丰富的经验,但当我重写html时,dom上的对象似乎也被替换了,所以所有的焦点都丢失了,因此它在一篇文章中有效,但不是两次。

这很令人困惑,主要是因为它的工作方式和我最初认为的一样,在IE浏览器上,但在Firefox上却没有。因此,为了使其跨浏览器兼容,我只使用JSON发回要更改的数据,然后向OnSuccess调用注册了一个函数,它只会更改所需的html,而不是重建部分。我想主要使用Asp.net MVC框架库来处理Ajax,以保持代码的简洁性,但我想这不太可能发生,除非我从部分中抽象出表单内容。

以下是为遇到此问题的其他人所做的更改:

控制器:

    [HttpGet]
    public PartialViewResult AMN()
    {
        string remarks = " ";
        return PartialView(((object)remarks));
    }
    [HttpPost]
    public JsonResult AMN(string PN = null)
    {
        IPS p=null;
        string remarks= " ";
        if (PN != null)
        {
            p = _pS.GetP(PN.Trim());
            remarks = p != null ? p.Remarks : null;
        }
        return Json(remarks);
    }

PartialView:

@model string
   <fieldset style="width:916px">
        <legend class="SearchFiledSet">AMN</legend>
        <table>
          <tr valign="top">
           <td>Notes:&nbsp</td>
           <td>@Html.TextArea("Notes", @Model, 5, 30, new { disabled = "disabled", style = "background: #FFF; border: 1px solid #000;" })</td>
           @using (Ajax.BeginForm("AMN", "PS", null, new AjaxOptions {OnSuccess = "processData" }, new { id = "AMNForm" }))
           {
             <td style="padding-left: 30px">PN: &nbsp @Html.TextBox("PN", "", new { size = "15" })
              @if(string.IsNullOrEmpty(@Model))
               {
                 <br />
                  <font color="red">No matching pn was found in the system.</font> 
               }
             </td>
             <td style="padding-left: 60px">
                   <button type = "submit">Search</button>
             </td>
           }
          </tr>
        </table>
   </fieldset>
   <s.. type="text/java..">
       function processData(data) {
           $("#Notes").val(data);
           if (!data[0])
               alert("data is null")
             else
               alert("data is not null")
       }
   </..>