在禁用javascript的情况下,Dot Net Nuke 5.2.1中的回发功能不起作用

时间:2010-01-15 00:18:22

标签: dotnetnuke

我正在开发我的第一个DotNetNuke网站,并且要求我开发的所有自定义模块功能都可以禁用JavaScript。

但是,当我创建一个包含简单提交按钮的模块,即<input type="submit" />时,DotNetNuke会在JavaScript变为关闭时显示一个严重错误,但在JavaScript转为时会按预期工作上

当我使用Visual Studio附加到正在运行的进程时,将从admin / Skins / Nav.ascx.vb第177行抛出未处理的异常。内部异常消息是“无效的JSON原语:。”

我的在线研究只设法发现这个论坛帖子(Postbacks are not working when Javascript is disabled in the browser)似乎与我的问题相同,但没有提供解决方案。

任何人都可以解释这个问题吗?试图在这个版本的DotNetNuke中编写非JavaScript功能是否可行?

更新:事实证明,我使用的公司最近使用Dot Net Nuke设计的另一个网站在使用DNN版本5.1.4时遇到与非javascript回发相同的问题但是它DNN版本5.0.1中没有出现问题(即可以回发而不使用javascript)。

因此,在版本5.0.1之后的某些时候可能已经引入了对javascript的硬依赖。我们正在进一步研究这种可能性,随着时间的推移,我会更新这个问题。显然,我仍然欢迎任何人就此问题提出意见。

更新:我已经在Dot Net Nuke论坛上开始了一个帖子,看看我是否能在那里得到任何帮助。如果有任何解决方案,我会在这里发布。 Trying to find official DNN stance on support for javascript disabled functionality

3 个答案:

答案 0 :(得分:2)

办公室的一位开发人员找到了一种解决方法,可以使用javascript禁用回发。不幸的是,由于他没有Stack Overflow帐户,我会尝试尽可能地为他感兴趣的人翻译他的解决方案。一旦您对Dot Net Nuke环境进行了一些更改,底线就是可以禁用Javascript的回发

第1步 - 更改菜单模块。在我们的例子中,我们使用了Telerik RadMenu。

<dnn:NAV runat="server" id="dnnNAV"  ProviderName="DNNMenuNavigationProvider" IndicateChildren="false" ControlOrientation="Horizontal" CSSControl="mainMenu" />

变为

<dnn:RADMENU runat="server" id="dnnRADMENU" MaxLevel="2" EnablePageIcons="False" PagesToExclude="" ShowPath="True" />

第2步 - 删除操作和可见性模块。

<dnn:ACTIONS runat="server" id="dnnACTIONS"  ProviderName="DNNMenuNavigationProvider" ExpandDepth="1" PopulateNodesFromClient="True" />

<dnn:VISIBILITY runat="server" id="dnnVISIBILITY"  minicon="images/DNN-minus.gif" maxicon="images/DNN-plus.gif" />

第3步 - 下载DNN源并在LibraryUI \ Utilities \ ClientAPI.vb文件中进行两项更改。

第155行:

DotNetNuke.UI.Utilities.ClientAPI.RegisterClientReference(objButton.Page, DotNetNuke.UI.Utilities.ClientAPI.ClientNamespaceReferences.dnn_dom)

变为

If Not objButton.Page.IsPostBack Then
 DotNetNuke.UI.Utilities.ClientAPI.RegisterClientReference(objButton.Page, DotNetNuke.UI.Utilities.ClientAPI.ClientNamespaceReferences.dnn_dom)
End If

第355行:

ClientAPI.GetCallbackEventReference(objPage, "", "", "", "")

变为

If Not objPage.IsPostBack Then
 ClientAPI.GetCallbackEventReference(objPage, "", "", "", "")
End If

第4步 - 编译Dot Net Nuke库。

注意:还要确保您没有以管理员或主机身份登录,因为如果您尝试使用禁用的javascript进行回发,页面顶部的管理员/主机面板也会中断。

希望这有助于其他人。如果你觉得我错过了一些重要的细节,请告诉我,我会尽力填写所需的内容。

答案 1 :(得分:0)

DotNetNuke在很大程度上依赖于JavaScript,我怀疑它有一个非常简单的方法 - 至少考虑到你需要支持所有功能。也许你可以澄清一下?

这里的底线是你需要修改DotNetNuke以满足你的需求。让它发挥作用当然不是不可能的,但我敢猜测,对大多数人来说,这显然是不值得的。

如果如你所说,你需要在不使用JavaScript的情况下保留所有功能,那么你将需要做大量的工作。

我建议,要开始使用,请下载源包,在本地计算机上设置开发环境,在浏览器中关闭JavaScript并开始记笔记。这将有助于确定所涉及的工作量。

我猜你不会从这个中得到很多回复(因为你链接到的论坛帖子中的海报没有)因为很少有人在DotNetNuke面前坐下来作为一个要求。

另外,请记住,每当您对DotNetNuke框架进行重大更改时,您都会干扰将来轻松执行升级的能力。还有一件事要考虑。

答案 2 :(得分:0)

我相信我已经看到DNN的领导层表示他们已经严格依赖JavaScript,并且此时无意考虑非兼容JavaScript的情况。

话虽如此,能够做一个简单的回发应该不会太难以支持。我会在客户端API区域中查看您所描述的错误。很多客户端API代码都在DotNetNuke.WebUtility程序集中,这是从CodePlex单独下载以获取源代码。