我的问题是在客户端上从动态生成的html / javascript调用服务器端事件(例如DeleteClicked)。我的网站上有一个现存的页面,它深深植根于.net。页面生命周期非常复杂,可以从页面触发数十个事件。
我们希望开始利用一些JQuery功能,并在页面加载后添加其他链接和按钮。例如,我们想在某些图像上显示一些悬停图形。小悬停图形将提供删除,编辑等功能。我想将这些客户端创建的点击事件与服务器端事件联系起来,而不必捶打(或绕过)整个页面生命周期。
到目前为止,我能想到的唯一解决方案是在整个页面中植入隐藏的asp.net控件,客户端代码手动强制对隐藏控件执行click()。不幸的是,我不认为这是可以接受的,因为我不一定知道在加载页面时可能需要调用的所有事件。我也不喜欢向客户发送大量标记,但不一定需要。
我的问题有意义吗?任何帮助将不胜感激!
答案 0 :(得分:1)
如果你真的想拥抱它,你应该以稍微不同的方式看待它。
您不仅可以通过这种方式进行代码重用,还意味着您可以在不使用UI的情况下测试代码。
答案 1 :(得分:1)
虽然jQuery会是更轻量级(更性感)的解决方案,但您是否考虑过在页面上的几个UpdatePanels中进行拍打?它并不理想,但是在没有太多额外编码的情况下,将ajax功能添加到现有表单是一种相对轻松的方法。
如果您对jQuery有所了解,可以使用WebMethod route将所有功能保留在单个页面中,甚至创建新的.aspx页面,jQuery将调用这些页面来执行某些操作(例如如果你有一个包含联系人的侧栏,可以将其移动到新的Ajax / Contacts.aspx页面,然后你可以通过jQuery调用来编辑它。
答案 2 :(得分:0)
如果您进入隐藏的控制路径,并且您不知道可能需要在特定负载上调用的所有事件,那么您将必须加载可能需要的所有隐藏按钮。通过这种方式,您将始终确保拥有一个可以发布的控件,并将其发回服务器。
您也可以只使用一个“点击”控制器来检查参数以查看它必须执行的操作,但这非常笨重。
或者,您可以从服务器端代码公开Web方法,这些方法可以从您的javascript中异步调用。这样,您可以执行操作,而无需控件上的事件处理程序。
例如:
/// <summary>
/// Deletes the 'something'.
/// </summary>
/// <param name="id">The unique id of the 'something' to delete.</param>
[WebMethod(true)]
public void DeleteSomething(string id) {
//Insert business logic
}
看看WebMethods(或其他人提到的AJAX),我认为你会发现它适合你的解决方案。
答案 3 :(得分:0)
不幸的是,我们没有找到一个很好的解决方案。似乎有效混合.net事件和JQuery AJAX的唯一方法是,如果要更新的元素是100%JQuery或100%.net事件。例如,如果您使用一组链接(例如编辑和删除)动态添加某种对象(如图片),则链接应该都使用手动AJAX(即JQuery调用WebMethod),然后使用JQuery更新DOM; OR 这两个链接都应该在更新面板中调用.net事件。如果您尝试创建一个链接JQuery而另一个链接一个.net事件,那么您将遇到问题,其中.net不知道DOM已经被JQuery更新,并且您的事件可能会变得混乱。要预测在DOM中设置的适当ID是非常困难的,这样.NET就不会混淆(如果你使用的是JQuery)。当.NET 4.0出现时,这应该会变得更容易,因为您可以选择手动指定控件ID而不是.NET生成它自己的疯狂ID。
答案 4 :(得分:0)
如何在经典&lt;%= Control 中混合.ClientId%&gt;服务器端标记进入JS?它有点乱,但也许可以选择让你度过.NET 4.0。
答案 5 :(得分:0)
我正在对那些被打开的旧问题进行一些清理,这里最好的解决方案是ASP.NET MVC - 这是一个更好的框架!对于那些被迫使用Web表单的人,我很抱歉,我没有更好的解决方案。对于那些可以选择尝试新事物的人,我强烈建议使用MVC!