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

时间:2015-12-07 17:47:02

标签: c# ajax asp.net-mvc-4

我使用带有局部视图的Ajax.Begin表单来替换已定义目标的内容。

喜欢这样,

部分视图:

@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

1 个答案:

答案 0 :(得分:0)

我想我现在根据对该主题的一般研究而不是将其指向Ajax.BeginForm方法来理解正在发生的事情。我想基本上模仿面板的概念,并且能够插入完整的表单并用ajax调用上的更新数据替换面板(部分视图)。好吧,我不是经验丰富的ajax或javascript,但似乎当我重写html时,dom上的对象也被替换,所以所有焦点都丢失了,因此它在一个帖子上工作但不是两次。

这很令人困惑,主要是因为它的工作方式与我原先认为的在Internet Explorer上的方式有关,但不是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")
       }
   </..>
相关问题