想要创建没有任何 asp 控件的动态 html 布局。实际上我只想在 aspx 页面上留下第一行
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Kletka._Default" %>
以及在代码隐藏上生成完整的 html 布局。请建议如何实现这一点。
一种方法是:
protected void Page_Load(object sender, EventArgs e)
{
string coolHTML = @"<div class=""someclass"">... and other cool content</div>";
Response.Write(coolHTML);
}
照这样说。这是一个可怕的想法。在后面的代码上动态构建 HTML 是维护的一场噩梦,它的性能并没有达到最佳效果,而且您失去了 asp.net 提供的许多其他功能,而这正是首先使用 ASP.NET 的主要原因。
您可以做的是为特定事物(页脚、页眉、左面板等)创建用户控件,并在标记中为它们定义布局;然后在后面的代码上,您可以根据某些业务条件将它们添加到页面中的特定占位符中。
假设您有一个母版页(或页面中至少有一些内容占位符),如下所示:
<asp:ContentPlaceHolder id="footer" runat="Server" />
在你可以做的代码后面:
footer.Controls.Add(new FooterControl());
更新OP刚刚在评论中提到他不喜欢asp.net控件...
您不必使用runat="server"
ASP.NET 控件,如果您需要能够在服务器端操作它们的属性,则可以使用常规 HTML 控件并设置它们的属性。例如:
<div id="mydiv" runat="server" > some content </div>
关于背后的代码:
myDiv.Attributes.Add("class","css_class");
myDiv.Attributes.Add("onclick","callJavascriptFunction();");
// and so on.
在非常特定的情况下偶尔做这种事情是可以的,但我会避免这种代码,因为它很难维护。例如,假设您需要向myDiv
元素添加另一个类。现在,你必须改变你的代码,而不是仅仅改变你的标记......
您需要在 Page_Init 事件中动态添加控件。所以你需要一个容器来保存你的 HTML,所以你应该首先向页面添加一个面板,然后页面的控件将被添加到面板中。
Panel pnl = new Panel();
Page.Controls.Add(pnl);
TextBox txt = new TextBox();
pnl.Controls.Add(txt);
ETC....
所以...您想使用 ASP.NET Web 表单而不使用 GridView 等内置控件吗?
您可以编写 html 并使用受保护的属性吗?<%= SomeWhereText %?
或者在后面的代码中使用完整的 html 布局来创建一个属性
protected string MyEntirePage {get;set;}
并在后面的代码中构建字符串
MyEntirePage="<h1>Hello</h1><p>body here</p><p>the end</p>";
并通过将其写在 aspx 页面中
<%=MyEntirePage%>
回复:“我明白你的意思,但我真的不喜欢 asp.net 控件。我更喜欢使用 html 控件并使用 js 自定义它们”
安装 NancyFx 或旧的(但仍然很棒)WCF Web Api 并使用类似 KnockoutJs、jQuery 或 Backbone 的东西来执行动态内容的 ajax 调用 = 根本不需要 asp.net Web 表单。耶。