我有一个自定义服务器控件,其属性为Title.使用控件时,我想在aspx页面中设置标题的值,如下所示:
<cc1:customControl runat="server" Title='<%= PagePropertyValue%>' >
more content
</cc1:customControl>
Run Code Online (Sandbox Code Playgroud)
但是,当我执行此操作时,我将显示正确的字符串<%= PagePropertyValue%>而不是我希望看到的属性值.
所以在尝试数据绑定表达式后(如下所示).我没有得到看起来很糟糕的字符串文字,但我也没有得到任何其他东西.
<cc1:customControl runat="server" Title='<%# PagePropertyValue%>' >
more content
</cc1:customControl>
Run Code Online (Sandbox Code Playgroud)
我需要对自定义控件做什么才能获得这种价值?或者我需要对页面做些什么.
我想知道是否有人有将用户控件转换为Web控件的经验?
理想情况下,我想将一些设计工作卸载给其他人,他们会给我很好的布局用户控件.然后,我可以完成转换,编译,测试和部署的过程.
直到MS提出神奇的"转换为服务器控制"选项,看起来我很难从头开始重写.有任何想法吗?
我几乎不好意思问这个问题,但我们开始......
我不是用户控件方面的专家,并且需要一些有关尝试实现特定所需功能的设计建议。
目标是拥有一个用户控件,它可以呈现为 html 元素和 css 的复杂结构,从而形成一个优雅的容器框。问题在于如何填充框中的内容,因为用户控件的每个实例都有其自己的单独的 HTML 内容。用户控件的内容容器 div 将深深嵌套在呈现的 html 结构中。以编程方式设置用户控件的内容或使用属性是不可取的。
在伪代码中,所需的语法类似于:
<usercontrol Title="Some Title"><p>some random html content</p></usercontrol>
Run Code Online (Sandbox Code Playgroud)
呈现的用户控件的示例如下:
<div class="CommonBox">
<div class="Title">Some Title</div>
<div class="Content"><p>some random html content</p></div>
</div>
Run Code Online (Sandbox Code Playgroud)
我希望我的解释是充分的。这对任何人都有意义还是所需的功能无法实现?
干杯!
编辑
我尝试了模板化的用户控制建议,希望能找到一个不错的解决方案。我“回溯”了这个网站 ,现在有了一个可以工作的模板化用户控件。我的下一个问题是,如何以编程方式访问模板中嵌套的控件...假设示例链接中的“描述”模板中有一个文本框控件,并且我想以编程方式设置其值?这可能吗?
我正在编写RenderContents()ASP.NET服务器控件的方法.该方法使用HtmlTextWriter对象来呈现输出内容.对于我正在编写的控件,使用这些HtmlTextWriter方法似乎需要很多行代码来打开和关闭每个标记并将每个属性添加到流中.最后,我觉得我最终会得到比它需要的时间长得多的代码.
我在想,如果我使用了一个可链接的类StringBuilder,我的代码会更清晰,更容易编写.
我想知道的是,有没有理由使用该HtmlTextWriter对象来呈现我的整个控件的内容?除了安全检查(我假设),它包括确保您不以错误的顺序写标签或创建无效标记,我没有看到原因.
看起来像这样做会更容易:
protected override void RenderContents(HtmlTextWriter output)
{
StringBuilder s = new StringBuilder();
s.Append("lots")
.Append("of")
.Append("strings");
output.BeginRender();
output.Write(s.ToString());
output.EndRender();
}
Run Code Online (Sandbox Code Playgroud)
有什么理由说这是个坏主意吗?
更新
响应Mehrdad Afshari的回答:
我没有考虑StringBuilder实例化单独对象的内存要求.如何为HtmlTextWriter创建一个包装器,以便它可以被链接,以便不会产生额外的字符串.
public class ChainedHtmlTextWriter
{
private HtmlTextWriter _W;
public ChainedHtmlTextWriter(HtmlTextWriter writer)
{
_W = writer;
}
public ChainedHtmlTextWriter Write<T>(T value)
{
_W.Write(value);
return this;
}
public ChainedHtmlTextWriter WriteLine<T>(T value)
{
_W.WriteLine(value);
return this;
}
}
Run Code Online (Sandbox Code Playgroud) asp.net stringbuilder servercontrols htmltextwriter method-chaining
当然,他们被宣布以"<asp:"开头的事实足以推断他们是服务器控件吗?或者只是为了完整而包含它(因此它们看起来类似于<input runat ="server"的服务器控制声明).还是有一些特殊原因?
它总是让我感到困惑,编译器告诉我,当我不小心这样做时,我已经错过了它.有点像"var"背后的想法 - 如果编译器知道它是什么..为什么要求我说出来呢?
我有一个CustomControl带有属性属性的自定义ASP.NET服务器控件Path.
如果Path没有明确指定,那么我想要抛出异常.
例如,
<myControls:CustomControl Path="somedirectory/someotherdirectory/somefile.ext" runat="server" />
应该编译,和
<myControls:CustomControl runat="server" /> 应该抛出异常.
我意识到我可以在Path属性的getter中做到这一点,但是有一些属性需要这个吗?
除了在代码隐藏属性的getter方法中使用之外,是否有任何机制可以验证属性属性的值?
asp.net custom-server-controls servercontrols asp.net-controls
任何人都可以推荐一个免费的asp.net控件,我可以用于以下内容:
这是一个控件,我发现这是非常好的,但我试图找到替代品:数据 绑定计划控件
asp.net data-binding custom-server-controls scheduling servercontrols
我创建了一个内部使用ITemplate的控件,以允许用户添加自己的东西.
<my:MyControl id="myControl" runat="server">
<Content>
//some stuff in here
</Content>
</my:MyControl>
Run Code Online (Sandbox Code Playgroud)
"Content"属性是模板.(这只是简化了.这个结构在一个更大的控件内).
现在我遇到的问题是我的用户将自己的UserControl置于其中<Content>..</Content>.这应该不是问题,但UserControl在PageLoad事件中调用页面的QueryString.现在我认识到当UserControl驻留在模板中时,Page对象为null,如果它放在外面,通常在页面上,它就可以工作.
有谁知道这里可能出现什么问题?
单击该按钮后,它会抛出"viewstate MAC failed的验证"异常.我知道MVC不支持PostBack但是有什么方法可以解决这个问题吗?
或者我们需要在MVC中使用HtmlHelper?
以下是我在View中的代码:
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<form id="form1" runat="server">
<h2>Hello World</h2>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<br />
<br />
<asp:Button ID="Button1" runat="server" Text="Button" />
</form>
</asp:Content>
Run Code Online (Sandbox Code Playgroud) 我将在我的自定义ServerControl中使用JQuery文件,因此我必须在Head标记中添加以下行.
<script type="text/javascript" src="jquery-1.4.3.min.js"></script>
Run Code Online (Sandbox Code Playgroud)
如何使用C#在ServerControl中执行此操作
servercontrols ×10
asp.net ×8
c# ×4
.net ×1
asp.net-mvc ×1
data-binding ×1
jquery ×1
postback ×1
runatserver ×1
scheduling ×1
templates ×1
web-controls ×1