Jos*_*ola 7 asp.net master-pages
我对以前只是简单的HTML和Javascript的现有应用程序进行了一些更改.为了添加服务器端功能,我选择了ASP.NET,并利用了Master Page概念.不幸的是,在一个巨大的Web表单上,控件ID都被"ctl00 $ ContentBody $"前缀所破坏.我在所有INPUT控件上添加了一个runat ="server",它改变了ID.现在已经更改了ID,Javascript(编写得很糟糕,我甚至无法阅读它,而且我对JS很有经验)完全被破坏了.
那么,我怎样才能防止这种废话被渲染到HTML中呢?我希望以某种方式能够创建一个继承HtmlGenericControl的类(我没有使用Web控件,我只是在每个输入标记的runat ="server"上添加)并以某种方式覆盖了粘贴这个"容器ID"的逻辑ID和NAME属性的开头.然后我可以在web.config中使用tagMapping来进行全局更改.这可能吗?
现在很小的安慰,但这个"功能"将在Asp.Net 4.0中修复.您将获得可设置的ClientID属性.
除此之外,其他反应都很好.
使用<%= control.ClientID%>
或抛出JQuery并使用$("[id $ ='myId'])
或者,在输入标记上,不要将runtime ='server'.您应该能够通过Form成员检索值(就像在传统的asp中一样)
或者,跳过Asp.Net WebForms并跳到Asp.Net MVC,它可以让您完全控制生成的HTML标记.你必须改变你的工作方式,但这对你来说可能不那么令人沮丧.
伙计们,我需要的是快速而肮脏的东西。感谢 HBoss,我能够想出一个非常简单的解决方案。在相关页面的代码隐藏中,我刚刚添加了这个子例程......
Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
Dim Html As New StringWriter()
Dim Render As New HtmlTextWriter(Html)
MyBase.Render(Render)
writer.Write(Html.ToString().Replace("name=""ctl00$ContentBody$", "name=""").Replace("id=""ctl00_ContentBody_", "id="""))
End Sub
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15922 次 |
| 最近记录: |