【问题标题】:ASP.NET MVC Beta Ajax upgrade problemASP.NET MVC Beta Ajax 升级问题
【发布时间】:2008-10-26 07:27:51
【问题描述】:

我一直在等待某个时间来让我的 Asp.net Preview 4 项目达到标准,完全跳过 Preview 5 只是因为我知道我会遇到一些问题。

总之,问题和困境在这里。

我在网站上有几个区域,我有一个 ajax 更新类型面板,它使用此处找到的这种技术从视图呈现内容。 AJAX Panels with ASP.NET MVC

这在预览版 4 中运行良好,但现在在 Beta 版中,我不断收到这个 ..

Sys.ArgumentNullException: Value cannot be null Parameter name eventObject

它一直让我发疯......

我的代码是这样的

<% using (this.Ajax.BeginForm("ReportOne", "Reports", null, new AjaxOptions { UpdateTargetId = "panel1" }, new { id = "panelOneForm" })) { }  %>
<div class="panel" id="panel1"><img src="/Content/ajax-loader.gif" /></div>
<script type="text/javascript">
  $get("panelOneForm").onsubmit();
 </script>

所以基本上它的作用是强制在表单上提交,它使用来自视图 ReportOne 的内容更新 panel1。

我错过了什么?为什么我会收到此错误?他们为什么要去改变事情?我喜欢 MVC,但这让我抓狂。

【问题讨论】:

    标签: asp.net asp.net-mvc ajax


    【解决方案1】:

    不幸的是,仅调用 submit() 不会触发 onsubmit 事件,因此 MVC Ajax 脚本不会运行。当浏览器为你调用onsubmit()时(因为用户点击了提交按钮),它实际上提供了一个名为event的参数(你可以看一下Ajax 助手输出的 Html)。

    所以,当你手动调用 onsubmit() 时,你需要提供这个参数(因为 MVC Ajax 代码需要它)。因此,您可以做的是创建一个“假”事件参数,并将其传递给 onsubmit:

    <% using (this.Ajax.BeginForm("ReportOne", "Reports", null, new AjaxOptions { UpdateTargetId = "panel1" }, new { id = "panelOneForm" })) { }  %>
    <div class="panel" id="panel1"><img src="/Content/ajax-loader.gif" /></div>
    <script type="text/javascript">
      $get("panelOneForm").onsubmit({ preventDefault: function() {} });
    </script>
    

    重要的部分是 { preventDefault: function() {} } 部分,它创建一个 JSON 对象,该对象有一个名为“preventDefault”的方法,该方法什么都不做。这是 MVC Ajax 脚本对事件对象所做的唯一事情,因此应该可以正常工作。

    如果 MVC Ajax 代码有一个简单地忽略空事件参数的检查 (wink @Eilon :P)

    【讨论】:

      【解决方案2】:

      有一些与此问题相关的恼人问题。希望这里有人可以帮助我。

      
      var event = new Object();
      function refreshInformation(){
      document.forms['MyForm'].onsubmit({preventDefault: function(){} });
      }
      

      这是我当前的代码,它可以很好地更新表单。问题是“var 事件”会破坏所有其他 javascript 事件,如果我有例如:

      
      <img src="myimg.gif" onmouseover="showmousepos(event)" />
      

      它不是发送到函数的鼠标事件,而是我必须声明的“var 事件”以使 onsubmit 正常运行。

      仅使用时

      onsubmit({preventDefault: function(){} }
      没有“var 事件”我得到
      Sys.ArgumentNullException: Value cannot be null Parameter name eventObject

      我也尝试过使用

      submit()
      这是一个完整的回发,完全忽略了 ajaxform 的东西......至少在我的解决方案中。

      嗯...我意识到这可能有点令人困惑,但如果有人理解这个问题,如果你也有解决方案,那就太好了。 =) 如果您需要有关该问题的更多信息,请直接询问,我会尝试详细说明。

      【讨论】:

        【解决方案3】:

        我相信调用 someFormElement.onsubmit() 只会调用为该事件注册的事件处理程序。要正确提交表单,您应该调用 someFormElement.submit()(不带“on”前缀)。

        我认为我们没有改变 ASP.NET MVC Preview 4 和 ASP.NET MVC Beta 之间的 AJAX 助手的行为。

        谢谢, 艾隆

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-12-18
          • 1970-01-01
          • 2015-02-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多