Using iFrames In ASP.NET - c#

I have an asp.net website with a master-page, can I use the iframe so my .aspx pages will load inside the iframes. (Meaning it wont load the master-page)
Kinda like my iframe will be the contentplaceholder or maybe the contentplaceholder will be inside it?
Any Ideas?

try this
<iframe name="myIframe" id="myIframe" width="400px" height="400px" runat="server"></iframe>
Expose this iframe in the master page's codebehind:
public HtmlControl iframe
{
get
{
return this.myIframe;
}
}
Add the MasterType directive for the content page to strongly typed Master Page.
<%# Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits=_Default" Title="Untitled Page" %>
<%# MasterType VirtualPath="~/MasterPage.master" %>
In code behind
protected void Page_Load(object sender, EventArgs e)
{
this.Master.iframe.Attributes.Add("src", "some.aspx");
}

Another option is to use placeholders.
Html:
<body>
<div id="root">
<asp:PlaceHolder ID="iframeDiv" runat="server"/>
</div>
</body>
C#:
iframeDiv.Controls.Add(new LiteralControl("<iframe src=\"" + whatever.com + "\"></iframe><br />"));

How about:
<asp:HtmlIframe ID="yourIframe" runat="server" />
Is supported since .Net Framework 4.5
If you have Problems using this control, you might take a look here.

You can think of an iframe as an embedded browser window that you can put on an HTML page to show another URL inside it. This URL can be totally distinct from your web site/app.
You can put an iframe in any HTML page, so you could put one inside a contentplaceholder in a webform that has a Masterpage and it will appear with whatever URL you load into it (via Javascript, or C# if you turn your iframe into a server-side control (runat='server') on the final HTML page that your webform produces when requested.
And you can load a URL into your iframe that is a .aspx page.
But - iframes have nothing to do with the ASP.net mechanism. They are HTML elements that can be made to run server-side, but they are essentially 'dumb' and unmanaged/unconnected to the ASP.Net mechanisms - don't confuse a Contentplaceholder with an iframe.
Incidentally, the use of iframes is still contentious - do you really need to use one? Can you afford the negative trade-offs associated with them e.g. lack of navigation history ...?

Related

how to read html file and render it inside an asp.net page

I was wondering if there is any way in C# to create a function which would call a preset html if the requirements are fulfilled.
Something like if url=domainname/test get <P>This is a test page</p>
you can use this command inside aspx page
<!--#include virtual ="test.html" -->
or make a redirect to test.html
Response.Redirect("test.html");
or make a transparent redirect
Server.Transfer("test.html");
or make a function that reads the html file and render it to the page.
txtTest.Text = File.ReadAllText(Server.MapPath("test.html")).ToString();
where txtTest is <asp:Literal runat="server" ID="txtTest"></asp:Literal> literal control on aspx page.
To make the include command inside aspx page you have to write it as
<%
if(Request.Url.ToString().Contains("http://url"))
{
%>
<!--#include virtual ="test.html"-->
<%
}
%>

Master page isn't loaded correctly on postBack

First of all, I'm very new to asp.net (Few days worth of experience).
I am using the default content provided by Visual Studio 2013 to work on a Web Forms Application.
Scenario: I would like to change the text of a Histamine(h2) after clicking a button.
Problem: I am using the default master page provided by Visual Studio but it is not loaded correctly on postBack. From what I can tell the resources it uses for it's layout can't be accessed? I'm not entirely sure what I'm doing wrong. If someone could enlighten me I would very much appreciate it.
My code so far:
Default2.aspx:
<%# Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>
<asp:Content runat="server" ContentPlaceHolderID="MainContent">
<h2 id="h1" runat="server">Change me please.</h2>
<asp:Button ID="b1" Text="Submit" runat="server" OnClick="dothis" />
</asp:Content>
Default2.aspx.cs:
public partial class Default2 : Page
{
protected void dothis(object sender, EventArgs e)
{
Header.InnerHtml = "Hello world.";
}
}
See change html tags text , on server side (C#, ASP.NET) for the code you need to implement. In your case:
h1.InnerHtml = "Hello";
As an alternative, instead of using an <h2> server control, you can wrap something like a label or literal control within the header tag, like this:
<h2><asp:LiteralControl runat="server" id="HeaderLiteral">Change me please</asp:LiteralControl></h2>
Then in your code-behind you can do this:
HeaderLiteral.Text = "Hello World!";
Personal preference but I generally shy away from Server Controls. No particular reason, but offering this suggestion for completeness sake.

How can i add iframe in my master page

I want to add iframe in my master page. suppose i ll refer this master page to other aspx page, the content of the contentplaceholder always display in iframe . Please help me to do this ..
This is my master page contenplace holder code:
<div class="main">
<asp:ContentPlaceHolder ID="MainContent" runat="server">
</asp:ContentPlaceHolder>
</div>
please help me ...
Based on your comment to VinayC, you don't want a Master page. You want a container page, old school HTML or another aspx, that will hold your iFrame. As VinayC pointed out, a master page is just a template, not an actual page that gets served. It's a layout template, nothing more.
If we're misunderstanding your intent and you need to inject an iFrame into a page, here's a bit of javascript that will do that:
function InsertIFrame(path) {
var iframe = document.createElement('iframe');
iframe.src = path;
document.body.appendChild(iframe);
}
Probably MasterPage/ContentPage does not work the way you are thinking. ASP.NET simply merges the content of both to produce the output. Master-page is just a layout that will be used while displaying the content page - the master page itself is not a navigable content.
From what you are describing, you probably don't need master page. What you need is a normal page that will have your basic layout along with an iframe whose source you can set to start-page. Once loaded, all the navigation will happen in the iframe giving you what you want.

ASP.NET MVC - How To Design Dynamic H1/Title Scheme?

If i have an ASP.NET MVC 2 Web Application with the following Views:
Main.aspx
Page1.aspx
Page2.aspx
And all Views inherit from a MasterView called Site.master,
I want to be able to have a default Title/H1 for the page, which can be overriden in the deriving Views.
E.g Main.aspx would have "MySite - xxx", Page1.aspx would have "MySite - Page 1", Page2.aspx would have "MySite - Page2".
And if i choose not to set the Title/H1 in a new derived view, the master Title/H1 would be displayed.
With WebForms, i would accomplish this in the following way:
Make the Title/H1 tags on the master runat="server"
Expose protected properties on the master code-behind
On Page_Load of the derived pages code-behind, set the property (Master.Title = "Page 1").
On Page_PreRender of the master code-behind, set the Title/H1 tags to "My Site - " + Title;
How can we accomplish this with ASP.NET MVC?
I could do this in the master:
<title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></title>
And then set it in the view:
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
MySite - Page 1
</asp:Content>
But i wanted to be able to only specify "Page 1" in the View, and the title gets magically changed to "MySite - Page 1". Know what i mean? The "MySite - " part of the title needs to be the template for the title.
I'm probably missing something obvious here. :)
With a quick search I found this:
http://haacked.com/archive/2009/04/03/tipjar-title-tags-and-master-pages.aspx
explains why
<title>MySite<asp:content..../></title>
doesn't work
This is how I usually do it:
<title>MySite - <%: Page.Title ?? "Default title" %></title>
in your MasterPage.
Then, you can define the Title property on a content page like this:
<%# Page Language="C#"
MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage"
Title="Page 1"
%>
Edit:
Well, you might want to see this SO question: ASP.NET MVC - View with master page, how to set title?.
Is much easier as you are describing it.
Just add a content placeholder to your master page
<title>
My Site - <asp:ContentPlaceHolder ID="PageTitle" runat="server" />
</title>
Then in your Content Page use it as
<asp:Content ID="Content3" ContentPlaceHolderID="PageTitle" runat="server">
My Page
</asp:Content>
This way will work but you have to use an HTML HEAD tag, not a server control. So simply remove runat="server" from your HEAD.

Disable feature in Master Page from Content Page

I have a Master Page for all my ASP.NET pages. It works fine for 95% of pages... Except that it also includes unwanted attributes that are included in the other 5% of pages. This causes application problems. Is it possible for Content Pages to somehow select to enable/disable a feature available in the master page? One option I can think of is for the Master Page to look at the page name and then decide what to do, but that's a bit clunky in the long run...
You can add a MasterType directive in your content page so you will have access to the master page class... and from there you can implement to enable disable features of your master page...
<%# MasterType virtualpath="~/MyMaster.master"%>
and in your code behind you will have access to the Master property as a typed class...
In your master page provide a content placeholder:
<asp:ContentPlaceHolder ID="foo" runat="server">
<div>Some default content</div>
</asp:ContentPlaceHolder>
In the 5% of the pages that don't need the default behavior override this placeholder with an empty string:
<asp:Content ID="Content1" runat="server" ContentPlaceHolderID="foo" />
The other 95% of the pages will get the common behavior.
You can access the master page directly by getting at the page and casting it to the type of your master page as below. This will couple you to the master page but the only other option I can think of is to create a key in session.
(MyMasterPage)Page.Master
Assuming that these features are represented in the asp markup of the master page, you could wrap it within a ContentPlaceHolderControl:
<asp:ContentPlaceHolder ID="OptionalContent" runat="server">
*** This is my optional content ***
</asp:ContentPlaceHolder>
In the 95% of pages where this content works, you can just not include a Content control for "OptionalContent" on your page. For the 5% where it doesn't work, you can include an empty Content control for "OptionalContent":
<asp:Content ContentPlaceHolderID="OptionalContent" runat="server"></asp:Content>

Categories