好的,我是一位经验丰富的网络开发人员,但有时ASP.Net正在欺骗我.我在asp.net中有一个母版页.然后我有一个基于该母版页(home.aspx)的页面.现在在home.aspx.cs中我想访问asp:content控件以编程方式添加控件.
Aspx看起来像这样:
<asp:Content ID="leftCol" ContentPlaceHolderID="cphLeftCol" Runat="Server">
<asp:PlaceHolder ID="phLeftCol" runat="server">
</asp:PlaceHolder>
</asp:Content>
Run Code Online (Sandbox Code Playgroud)
我希望我能从后面的代码中引用"leftCol".但那里还不知道.为了测试,我添加了自己的占位符"phLeftCol".我可以毫无问题地参考.
有没有我看不到的东西?
我有一个使用母版页的大型ASP.net网站.
我已经确定,如果用户可以在从数据库生成/处理/加载页面的其余部分时看到标题和导航,那么用户将获得更好的体验.
我做了一些简单的测试,我可以在page_load()中执行Response.Write(),然后执行Response.Flush(),并且IIs将使用chunked编码并在页面的其余部分呈现时立即将输出发送到浏览器.
我想做同样的事情,但只发送母版页头和导航.
关于如何实现这一点的任何指针?
使用ASP.net 4和IIs 7.5
编辑
如果有人可以提供一些关于如何更改网站以使用AJAX而无需更改每个页面和链接的指示,我会很感激.谢谢!
我有一个使用asp.net母版页的应用程序,我想在页面顶部和底部重复一些内容.目前我使用这样的东西:
母版页<html>
<body>
<asp:ContentPlaceHolder ID="Foo" runat="server">
</asp:ContentPlaceHolder>
<!-- page content -->
<asp:ContentPlaceHolder ID="Bar" runat="server">
</asp:ContentPlaceHolder>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
内容页
<asp:Content ID="Top" ContentPlaceHolderID="Foo" runat="server">
<!-- content -->
</asp:Content>
<asp:Content ID="Bottom" ContentPlaceHolderID="Bar" runat="server">
<!-- content repeated -->
</asp:Content>
Run Code Online (Sandbox Code Playgroud)
如您所知,在代码中重复一些事情通常并不好.它会产生维护问题.以下是我想要做的,但由于重复的id属性,显然不会起作用:
母版页<html>
<body>
<asp:ContentPlaceHolder ID="Foo" runat="server">
</asp:ContentPlaceHolder>
<!-- page content -->
<asp:ContentPlaceHolder ID="Foo" runat="server">
</asp:ContentPlaceHolder>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
内容页
<asp:Content ID="Top" ContentPlaceHolderID="Foo" runat="server">
<!-- content (no repetition) -->
</asp:Content>
Run Code Online (Sandbox Code Playgroud)
有没有办法使用asp.net webforms做到这一点?解决方案不一定必须与上述内容相似,只需要以相同的方式工作.
我在Visual Studio 2008中使用asp.net 3.0
我有一个页面,它使用母版页,几个RequiredFieldValidators和Web Toolkit自动完成扩展程序.以下代码仅显示页面的最小值:
<%@ Page Language="C#"
AutoEventWireup="true"
CodeFile="Login.aspx.cs"
MasterPageFile="~/master.master"
Inherits="Login" %>
<asp:Content id="Content1"
contentplaceholderid="ContentPlaceHolder1"
runat="server">
<asp:UpdatePanel ID="pnlUpdate" runat="server">
<ContentTemplate>
<div>
<asp:ImageButton class="submitButton"
imageurl="images/button_submit.gif"
id="btnSubmit"
runat="server"
onclick="btnSubmit_ServerClick"/>
</div>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Content>
Run Code Online (Sandbox Code Playgroud)
代码隐藏:
protected void btnSubmit_ServerClick
(object sender, ImageClickEventArgs e)
{
//breakpoint here does not get hit
}
Run Code Online (Sandbox Code Playgroud)
该<form runat="server">标签是在母版页.上面的代码不会触发onclick事件.如果我删除母版页并向页面添加表单标记,它就可以工作.是否不支持母版页中的表单标记,或者这应该以某种方式工作?
alt text http://digitalcopy.warnerbros.com/images/mainmenu.gif?provider=00079&disc=03403AAA-1D20-47F2-91FA-5EE632832659
HTML
<body>
<form id="form1" runat="server">
<asp:Button runat="server" ID="a" OnClick="a_Click" Text="apd"/>
</form>
</body>
Run Code Online (Sandbox Code Playgroud)
码
protected void a_Click(object sender,EventArgs e)
{
Response.Write(((Button)FindControl("a")).Text);
}
Run Code Online (Sandbox Code Playgroud)
这段代码工作正常.
但是,这段代码:
HTML
<%@ Page Title="" Language="C#" MasterPageFile="~/Student/MasterPage.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Student_Default" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<asp:Button runat="server" ID="a" OnClick="a_Click" Text="andj"/>
</asp:Content>
Run Code Online (Sandbox Code Playgroud)
码
protected void a_Click(object sender, EventArgs e)
{
Response.Write(((Button)FindControl("a")).Text);
}
Run Code Online (Sandbox Code Playgroud)
此代码无效并FindControl返回Null- 为什么会这样?
该FindControl方法适用于简单的页面,但在母版页中,它不起作用吗?
将ID a更改为ctl00_ContentPlaceHolder1_a- 如何找到控件?
我是一个新的ASP.NET Web Forms开发人员,并试图将Twitter Bootstrap与Master Page一起使用.当用户选择导航栏项时,我正在努力将其设置为活动状态.我按照本教程创建了我的简单母版页,关于如何在ASP.NET中使用Twitter Bootstrap.
这是我的母版页的代码:
<%@ Master Language="VB" CodeFile="MasterPage.master.vb" Inherits="MasterPage" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<link href="css/bootstrap.css" rel="stylesheet" type="text/css" />
<asp:ContentPlaceHolder id="head" runat="server">
</asp:ContentPlaceHolder>
</head>
<body>
<form id="form1" runat="server">
<div>
<div class="container">
<div class="row-fluid">
<div class="span12">
<div class="page-header">
<h1>Hello... My First Website with Twitter Bootstrap</h1>
</div>
</div>
</div>
<div class="row-fluid">
<div class="span3">
<ul class="nav nav-list">
<li class="nav-header">Navigation</li>
<li class="active"><a href="Default.aspx">ASP.NET</a></li>
<li><a href="Default2.aspx">Java</a></li>
<li><a href="#">VB.Net</a></li>
<li><a href="#">C#</a></li>
</ul>
</div>
<div class="span9">
<asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server"> …Run Code Online (Sandbox Code Playgroud) 我在过去几天玩ASP.NET MVC并且能够构建一个小站点.一切都很好.
现在,我需要通过ViewData传递页面的META标签(标题,描述,关键字等).(我正在使用母版页).
你是如何处理这个的?先感谢您.
好的,所以我们都知道在页面的OnPreInit事件中动态更改母版页.
但是嵌套母版怎么样?我可以更换主人的主人吗?
MasterPage类中没有公开OnPreInit事件.
有任何想法吗?
我在ASPX方面有以下代码:
<%@ Page Language="C#" MasterPageFile="~/masterpages/standard.Master" .... %>
<%@ MasterType VirtualPath="~/masterpages/standard.Master" %>
Run Code Online (Sandbox Code Playgroud)
我使用VirtualPath访问我的MasterPage中的属性.到现在为止还挺好.
但是,现在我必须以编程方式更改主页.我知道要更改母版页,我必须在page_init上执行:
Page.MasterPageFile = "~/masterpages/myNewMasterPage.Master";
Run Code Online (Sandbox Code Playgroud)
但我不知道如何更改VirtualPath.
我们有一个运行的解决方案包含许多web forms具有相同母版页的应用程序,我们为母版页及其控件创建了一个类库项目,并将其作为dll每个Web表单应用程序内部引用并以编程方式分配母版页
现在我们将为我们的解决方案添加两个新应用程序,但我们决定ASP.Net MVC 3用于构建这些新应用程序.
问题是,我们必须为新应用程序使用相同的母版页,那么我们如何使用代码为我们的视图设置母版页?
注意记住我们的母版页是一个类库项目.
master-pages ×10
asp.net ×8
c# ×3
webforms ×2
.net ×1
asp.net-mvc ×1
iis-7 ×1
imagebutton ×1
navbar ×1
onclick ×1