比如有个Template.aspx
<div id="divContent">
<input type="button" value="保存" onclick="alert(document.getElementById('divContent').innerHTML)"/>
<br />
<table><tr><td>请输入模板名称:</td><td>
<input type="text" runat="server" id="txtTemplateName" />
</td>
<td>
<asp:Button ID="Button8" runat="server" Text="生成模板" OnClick="Button8_Click" />
</td>
</tr></table>
</div>
///////////////////////////////////////////////////////////////
现在想把以上的代码 写到一个用户控件
我以前的代码是:(先在js div.innerHtml保存到隐藏域)
if (hiContent.Value != null && hiContent.Value != "")
{
//Method 1:
strPath = strRootPath +"\\TemplateControl\\" + txtTemplateName.Value.Trim() + ".ascx";
sw = new StreamWriter(strPath, false,Encoding.Default);
string strHead = "<%@ Control Language='C#' AutoEventWireup='true' CodeFile='" + txtTemplateName.Value.Trim() + ".ascx.cs' Inherits='" + txtTemplateName.Value.Trim() + "' %>";
sContent = strHead + "\n\n<div>"+hiContent.Value+"</div>";
sw.Write(sContent);
sw.Close();
}
===============================================================
问题是这样保存的代码毕竟跟我想要的不一样
比如<asp:TextBox runat="server">都变成了 <input type='text'> 关键是把
runat="server"去掉了 这样在以后加载这个用户控件的时候就无法对这个文本框进行赋值
===============================================================
动态加载和赋值代码如下:
string strVisulPath = "TemplateControl\\mmm.ascx";
Control UserControl = Page.LoadControl(strVisulPath);
UserControl.ID = "dc";
DynamicControl.Controls.Add(UserControl); HtmlInputText tb = (HtmlInputText)DynamicControl.FindControl("dc").FindControl("TextBox2");
tb.Value = "test";
<div id="divContent">
<input type="button" value="保存" onclick="alert(document.getElementById('divContent').innerHTML)"/>
<br />
<table><tr><td>请输入模板名称:</td><td>
<input type="text" runat="server" id="txtTemplateName" />
</td>
<td>
<asp:Button ID="Button8" runat="server" Text="生成模板" OnClick="Button8_Click" />
</td>
</tr></table>
</div>
///////////////////////////////////////////////////////////////
现在想把以上的代码 写到一个用户控件
我以前的代码是:(先在js div.innerHtml保存到隐藏域)
if (hiContent.Value != null && hiContent.Value != "")
{
//Method 1:
strPath = strRootPath +"\\TemplateControl\\" + txtTemplateName.Value.Trim() + ".ascx";
sw = new StreamWriter(strPath, false,Encoding.Default);
string strHead = "<%@ Control Language='C#' AutoEventWireup='true' CodeFile='" + txtTemplateName.Value.Trim() + ".ascx.cs' Inherits='" + txtTemplateName.Value.Trim() + "' %>";
sContent = strHead + "\n\n<div>"+hiContent.Value+"</div>";
sw.Write(sContent);
sw.Close();
}
===============================================================
问题是这样保存的代码毕竟跟我想要的不一样
比如<asp:TextBox runat="server">都变成了 <input type='text'> 关键是把
runat="server"去掉了 这样在以后加载这个用户控件的时候就无法对这个文本框进行赋值
===============================================================
动态加载和赋值代码如下:
string strVisulPath = "TemplateControl\\mmm.ascx";
Control UserControl = Page.LoadControl(strVisulPath);
UserControl.ID = "dc";
DynamicControl.Controls.Add(UserControl); HtmlInputText tb = (HtmlInputText)DynamicControl.FindControl("dc").FindControl("TextBox2");
tb.Value = "test";
解决方案 »
- 按钮回发
- 我用ajax的出用户名不能注册,但是我怎么在button事件中怎么控制它不能添加到数据库呢(急救)
- 文章给关键词自动加链接
- sqlhelper 类为什么定义为抽象的?
- GridView.DeleteRow 删除行问题
- 昨天面视题请大家看看,会的帮忙解决,给以后面视的同仁.
- 一个关于ASP.NET里关于Label数组的问题,希望大家帮下忙,谢谢
- Microsoft JScript 运行时错误: Automation 服务器不能创建对象
- 我在做啟用身份驗證時,為什麼web.config會提示出錯.
- 我是一个初学者,初次接受ASP.NET课程,我该从那下手啊?
- 怎样购买受到法律保护的所有权的域名?
- 如何保证上传的文章格式不变
<div id="divContent"> </div>之间的内容,然后写到用户控件
<div></div>
a.aspx.cs
里面怎么读得到那个div呢?
我就用innerHmtl过来的代码
然后用正则 把input换成相应的TextBox 或者加个runat="server"?
?
先用StreamReader读出String,然后用正则找.
========
不好意思
我真的不太明白怎么能获得那个String
string str = sw.ReadToEnd();
sw.Close();
===============================================
你那方法可能不适合我
因为我的改动很大 控件多少都可能不一样
木白兄
我这个动态生成ascx的内容
来自aspx
这样可以吧?
System.IO.StreamReader sw = new StreamReader(Server.MapPath("a.aspx"));
string str = sw.ReadToEnd();
sw.Close();
---------------------
如果你控件多少也是动态加载的,那慕白兄的方法也不行,如果你的控件是写死在你的Template.aspx页面中,就可以使用慕白兄的方法来实现.
a.aspx.cs里面去找a.aspx里面的div内容
这个可能不行
木白兄 因为我在找div的时候
这个a.aspx还没成为文件
===============
在写进ascx文件是时候 是固定的
然后把div里面的内容写到ascx
感觉木白兄的意思是
我先生成这个Template.aspx
然后在在另外一个页面里面对这个Template进行操作
-----------------
为什么,a.aspx在硬盘上就行了啊
<div id="divContent">
<input type="button" value="保存" onclick="alert(document.getElementById('divContent').innerHTML)"/>
<br />
<table><tr><td>请输入模板名称:</td><td>
<input type="text" runat="server" id="txtTemplateName" />
</td>
<td>
<asp:Button ID="Button8" runat="server" Text="生成模板" OnClick="Button8_Click" />
</td>
</tr></table>
</div>
----------------------------------
然后就想读取一般的txt文件一样读取Template.aspx的内容就行了。
Template.aspx
<div><table>...</table><div>
现在在Template.asp.cs里面想写
Page_Load
{
System.IO.StreamReader sw = new StreamReader(Server.MapPath("Template.aspx"));
string str = sw.ReadToEnd();
sw.Close();
}
?
也就是说你页面的控件是动态添加上去的?
========
你讲的方法是先生成这个Template.aspx
然后在操作这个Template.aspx把里面的div内容正则出来我想的是如楼上叙
先打开一个Template.aspx
里面有很多控件
用户可以把控件删除啊 改变Text等操作
改变完以后
我提供一个按钮 生成模板
在这个按钮事件里面
把Template.aspx div里面的内容复制到新建的ascx 文件
就这样来生成模板
=====
哈 我可能讲的有问题 或者那个名字取的误导你们
我这个Template.aspx里面的内容是固定的
至少在准备拷贝div内容之前是固定的 而不是从哪里取来的
加工加runat="server"如果想做得好一点的话,把htmlweb控件替换成webcontrol
如:
<input type="text"....替换成<asp:textbox ...
用js div.innerHTML
然后在后台读取这个值
然后对这个值的<input>都加个runat="Server"是这样的嘛?
------------------
恩,加上runat="Server"就行了,不过要注意你input的id有没有变化,因为ASPX生成html后id可能会变了,如果变了,可能id也要改。
我在生成模板事件里面
打开一个新页面
然后用StreamReader操作这个Template.aspx?
然后用StreamReader操作这个Template.aspx?
------------------
但是你这个新页面是死的啊,不是你用户操作后的结果啊。