gpt4 book ai didi

ASP.NET MVC Beta Ajax升级问题

转载 作者:行者123 更新时间:2023-12-02 15:25:38 24 4
gpt4 key购买 nike

我已经等待一段时间了,希望我的 Asp.net Preview 4 项目能够达到标准,完全跳过 Preview 5,因为我知道我会遇到一些问题。

无论如何,这就是问题和困境。

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

这在预览版 4 中运行良好,但现在在测试版中我不断收到此消息..

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>

所以基本上它所做的就是强制提交表单,这会使用 View ReportOne 中的内容更新 panel1。

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

最佳答案

不幸的是,仅调用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 代码有一个简单地忽略 null 事件参数的检查(wink @Eilon :P),也许一个长期的解决方案是

关于ASP.NET MVC Beta Ajax升级问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/237691/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com