Asp contents remove


Содержание

Мастер-страницы

— это средство ASP.NET, разработанное специально для стандартизации компоновки веб-страниц. Мастер-страницы представляют собой шаблоны веб-страниц, которые могут определять фиксированное содержимое и объявлять часть веб-страницы, куда можно помещать нестандартное содержимое. При использовании одной и той же мастер-страницы во всем веб-сайте компоновка гарантированно будет одинаковой. Более того, если изменить определение мастер-страницы после ее применения, то все использующие ее веб-страницы автоматически воспримут это изменение.

Чтобы можно было обеспечить практическое и гибкое решение для создания шаблонов страниц, должен быть удовлетворен ряд требований:

Должна существовать возможность определения части страницы отдельно и повторного ее использования во множестве страниц.

Должна существовать возможность создания фиксированной компоновки, определяющей редактируемые области. В страницах, повторно использующих этот шаблон, можно будет добавлять или модифицировать содержимое только в разрешенных областях.

Должна быть возможность ограниченной настройки элементов, повторно используемых на каждой странице.

Должна существовать возможность связывания страницы с шаблоном страницы декларативно (без кода) или со страницей динамически во время выполнения.

Должна обеспечиваться возможность проектирования страницы, использующей шаблон страницы, с помощью таких инструментов, как Visual Studio.

Мастер-страницы соответствуют всем этим требованиям. Они обеспечивают систему для повторного использования шаблонов, способ ограничения модификации шаблонов и широкую поддержку во время проектирования.

Чтобы это все работало, в ASP.NET определены два новых типа страниц: мастер-страницы и страницы содержимого. Мастер-страница представляет собой шаблон страницы. Как и обычная веб-страница ASP.NET, она может содержать любую комбинацию HTML, веб-элементов управления и даже кода. Кроме того, мастер-страницы могут включать заполнители содержимого — определенные модифицируемые области. Каждая страница содержимого ссылается на одну мастер-страницу и получает ее компоновку и содержимое. Также страница содержимого может добавлять характерное для страницы содержимое в любые заполнители. Другими словами, страница содержимого заполняет отсутствующие части, которые не определены в мастер-странице.

Например, на обычном веб-сайте мастер-страница может включать фиксированный элемент, например, верхний колонтитул, и заполнитель содержимого для остальной части страницы. Страница содержимого получает этот колонтитул и предоставляет дополнительное содержимое.

Чтобы лучше понять, как это работает, давайте рассмотрим пример.

Простая мастер-страница

Чтобы создать мастер-страницу в Visual Studio, выберите пункт меню WebSite Add New Item. Затем укажите элемент Master Page, назначьте имя (например, SiteTemplate.master) и щелкните на кнопке Add.

Мастер-страница подобна обычной веб-форме ASP.NET. Как и веб-форма, мастер-страница может включать HTML-разметку, веб-элементы управления и код (встроенный блок сценария либо отдельный файл). Одно различие между ними заключается в том, что веб-формы начинаются с директивы Page, а мастер-страница — с директивы Master, определяющей ту же информацию:

Другое различие между мастер-страницами и обычными веб-формами состоит в том, что мастер-страницы могут использовать элемент управления ContentPlaceHolder, а обычные страницы — нет, ContentPlaceHolder является частью страницы, в которую страница содержимого может вставлять содержимое.

При создании новой мастер-страницы в Visual Studio процесс начинается с создания пустой страницы, включающей два элемента управления ContentPlaceHolder. Один определен в разделе , благодаря чему страницы содержимого получают возможность добавлять метаданные страницы, такие как ключевые слова поиска или ссылки на таблицы стилей.

Второй, более важный, элемент управления ContentPlaceHolder определен в разделе и представляет видимое содержимое страницы. Чтобы создать более сложные компоновки страницы, можно добавить дополнительную разметку и элементы управления ContentPlaceHolder.

Элемент управления ContentPlaceHolder не имеет никаких примечательных свойств. Ниже приведен пример кода, в котором создается мастер-страница со статическим баннером, элементом управления ContentPlaceHolder и нижним колонтитулом:

Мастер-страницу нельзя запрашивать напрямую. Чтобы использовать мастер-страницу, потребуется создать связанную страницу содержимого.

Простая страница содержимого

Для использования созданной мастер-страницы в другой веб-странице необходимо добавить атрибут MasterPageFile к директиве Page. Этот атрибут показывает имя файла требуемой мастер-таблицы:

Обратите внимание, что атрибут MasterPageFile начинается с пути

/, который указывает корневую папку веб-сайта.

Установки атрибута MasterPageFile недостаточно для преобразования простой страницы в страницу содержимого. Проблема в том, что единственная обязанность страницы содержимого — определение содержимого, которое будет вставлено в один или несколько элементов управления ContentPlaceHolder (а также запись любого необходимого для этих элементов управления кода). Страница содержимого не определяет страницу, поскольку внешняя оболочка уже предоставлена мастер-страницей. В результате попытка включения таких элементов, как , и , ни к чему не приведет, поскольку они уже определены на мастер-странице.

Чтобы предоставить содержимое для элемента управления ContentPlaceHolder, используется другой специализированный элемент управления, называемый Content. Элемент управления ContentPlaceHolder и Content связаны отношением «один к одному». Для каждого элемента управления ContentPlaceHolder в мастер-странице страница содержимого предоставляет соответствующий элемент управления Content (если для данной области вообще должно предоставляться содержимое).

ASP.NET связывает элемент управления Content с соответствующим элементом управления ContentPlaceHolder, сопоставляя >ContentPlaceHolderID соответствующего элемента управления Content. Если создать элемент управления Content, который будет ссылаться на несуществующий элемент управления ContentPlaceHolder, во время выполнения возникнет ошибка.

Среда Visual Studio позволяет дополнительно облегчить создание новой страницы содержимого. Выберите пункт меню Website Add New Item. Укажите элемент Web Form, установите флажок Select Master Page (Выбрать мастер-страницу) и щелкните на кнопке OK. Visual Studio предложит выбрать файл мастер-страницы из текущего веб-проекта. После этого Visual Studio автоматически создаст элемент управления Content для каждого элемента управления Content PlaceHolder на мастер-странице.

Таким образом, чтобы создать полную страницу содержимого, которая использует мастер-страницу SiteTemplate, нужно просто заполнить содержимое для элемента управления ContentPlaceHolder с идентификатором ContentPlaceHolder1. Ниже приведен код всей страницы:

В этом примере директива Page задает атрибуты MasterPageFile и Title. Атрибут Title позволяет указать заголовок страницы содержимого, заменяя таким образом заголовок, который задан в мастер-странице. Этот вариант будет работать в том случае, если в дескрипторе задан атрибут runat=»server» (это делается по умолчанию).

Как видите, страницы содержимого совершенно пусты, поскольку они не включают никаких деталей, определенных в мастер-странице. Более того, это облегчает обновление веб-сайта. Для этого достаточно модифицировать одну мастер-страницу. До тех пор пока сохраняются одни и те же элементы управления ContentPlaceHolder, существующие страницы содержимого будут работать, и будут вставляться в любую указанную новую компоновку. Этот пример страницы содержимого показан на рисунке ниже:


Для динамического конфигурирования мастер-страницы или страницы содержимого можно воспользоваться событием Page.Load в любом классе. В некоторых случаях код инициализации придется помещать и в мастер-страницу, и в страницу содержимого. В таких ситуациях важно понять порядок, в котором генерируются соответствующие события.

Сначала ASP.NET создает элементы управления для мастер-страницы, а затем дочерние элементы управления для страницы содержимого. После этого генерируется событие Page.Init для мастер-страницы, а за ним — такое же событие для страницы содержимого. Аналогичная последовательность имеет место и для события Page.Load. Таким образом, в случае возникновения конфликта настройки, выполняемые в странице содержимого (например, изменение заголовка страницы), получают преимущество по сравнению с изменениями, которые выполняются на этом же этапе в мастер-странице.

Мастер-страницы и форматирование

Мастер-страницы предлагают несколько интересных возможностей для стандартизации форматирования. Например, можно подключиться к мастер-странице, не используя темы, за счет добавления элемента
в раздел мастер-страницы. Таким образом, таблица стилей будет автоматически применяться ко всем страницам содержимого, которые используют данную мастер-страницу.

Можно также воспользоваться более детальной моделью, благодаря которой мастер-страница поможет применять различное форматирование к разным разделам страницы содержимого. Для этого достаточно установить подходящие цвета фона и переднего плана, шрифты и опции выравнивания с помощью дескрипторов контейнера в мастер-странице. Например, их можно задать в таблице, ячейке таблицы, дескрипторе

Содержимое по умолчанию

Когда мастер-страница определяет элемент управления ContentPlaceHolder, она может также включать содержимое по умолчанию — содержимое, которое будет использовано только в том случае, если страница содержимого не предоставит соответствующий элемент управления Content.

Чтобы добиться этого эффекта, достаточно поместить соответствующие элементы управления HTML или веб-элементы управления в дескриптор ContentPlaceHolder. (Это можно сделать либо вручную в разметке .aspx, либо перетащить элементы управления в ContentPlaceHolder.)

В предыдущем примере содержимое по умолчанию добавляется к тексту баннера, который мы не переопределяли в странице содержимого:

Если страница содержимого создается в Visual Studio, вы не заметите никаких немедленных изменений. Дело в том, что Visual Studio автоматически создает дескриптор для каждого элемента управления ContentPlaceHolder. Если страница содержимого включает дескриптор , он автоматически замещает содержимое, используемое по умолчанию. Однако если дескриптор удалить, отобразится содержимое по умолчанию — новый текст баннера «My Site».

Страницы содержимого не могут использовать только часть содержимого по умолчанию, а также изменять его. Это невозможно, потому что содержимое по умолчанию хранится только в мастер-странице, а не в странице содержимого. В результате придется либо использовать содержимое по умолчанию в том виде, каком оно существует, либо заменять его полностью.

Мастер-страницы и относительные пути

Ничего не подозревающий разработчик может быть ошеломлен тем, каким образом мастер-страницы обрабатывают относительные пути. При использовании только статического текста это не имеет значения. Однако при добавлении дескрипторов или любого другого HTML-дескриптора, указывающего на другой ресурс, может возникнуть проблема.

Проблема проявится в том случае, если мастер-страница и использующая ее страница содержимого оказываются в разных каталогах. Такую практику рекомендуется применять для крупных веб-сайтов. В Microsoft предлагается предусмотреть специальную папку для хранения всех мастер-страниц. Однако при невнимательном использовании этот подход может породить проблемы, связанные с относительными путями.

Предположим, например, что мастер-страница была помещена в подпапку по имени MasterPages и в мастер-страницу был добавлен следующий дескриптор :

Если файл \MasterPages\banner.jpg существует, то, на первый взгляд, все работает нормально. Изображение будет даже появляться в среде проектирования Visual Studio. Однако если создать страницу содержимого в другой подпапке, то путь будет интерпретироваться по отношению к этой папке. Если в ней не будет этого файла, то вместо изображения вы получите неработающую ссылку. Более того, если какое-то изображение будет храниться в файле с таким же именем, вы получите еще и неверное изображение.

Эта проблема возникает из-за того, что дескриптор является обычным HTML-дескриптором. В результате ASP.NET даже не обратится к нему. К сожалению, когда ASP.NET создает вашу страницу содержимого, этот дескриптор не имеет никакого значения. Та же проблема возникает с дескрипторами , которые содержат относительные ссылки на другие страницы, и с элементом
, который можно использовать для подключения мастер-страницы к таблице стилей.

Для решения этой проблемы можно попробовать заранее записать свой URL-адрес относительно страницы содержимого, в которой его нужно использовать. Но это создает путаницу, ограничивает места использования мастер-страницы и оказывает нежелательный побочный эффект неправильного отображения мастер-страницы в среде проектирования.

Илон Маск рекомендует:  Getcwd дать текущий каталог

Еще один быстрый способ решения этой проблемы — преобразование дескриптора изображения в элемент управления серверной стороны, в результате чего ASP.NET исправит ошибку:

Это работает потому, что ASP.NET применяет данную информацию для создания серверного элемента управления HtmlImage. Этот объект создается после создания экземпляра объекта Page для мастер-страницы. С этого момента ASP.NET будет интерпретировать все пути относительно местонахождения мастер-страницы. Такой прием можно использовать и для корректировки дескрипторов , содержащих относительные ссылки на другие страницы.

Можно также применять синтаксис указания пути к корневому каталогу и начинать URL-адрес с символа тильды (

) или точки. Например, следующий дескриптор однозначно указывает на файл baner.jpg в подпапке MasterPages веб-сайта:

К сожалению, этот синтаксис подходит только для элементов управления серверной стороны. Если вы хотите получить аналогичный эффект с обычным элементом HTML, понадобится изменить ссылку на полный относительный путь, включающий доменное имя. В результате получается громоздкая и непереносимая HTML-разметка, поэтому данный способ применять не рекомендуется.

ShotDev.Com

ASP Session.Contents.Remove() — Session Object

ASP Session.Contents.Remove() — Session Object Deletes an item from the session-state collection.

Shot Dev Focus :
— The name of the item to delete from the session-state collection.

Syntax

Example


asp_session_remove.asp

Create a asp file and save to path root-path/myasp/

Screenshot

Download this script.

Asp contents remove

This is my code:

In the Startup class:

public void ConfigureAuth(IAppBuilder app)
<

app.UseCookieAuthentication(new CookieAuthenticationOptions
<
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString(«/Account/Login»),
Prov > <
OnVal > validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)),
>,
Sl > ExpireTimeSpan = TimeSpan.FromMinutes(30)
>);
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);

// Enables the application to temporarily store user information when they are verifying the second factor in the two-factor authentication process.
app.UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie, TimeSpan.FromMinutes(5));

// Enables the application to remember the second login verification factor such as phone or email.
app.UseTwoFactorRememberBrowserCookie(DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie);

app.UseMicrosoftAccountAuthentication(new Microsoft.Owin.Security.MicrosoftAccount.MicrosoftAccountAuthenticationOptions()
<
Client ],
ClientSecret = WebConfigurationManager.AppSettings[«Microsoft_ClientSecret»],
Scope = < "wl.basic", "wl.emails" >
>);

Then the LogOff method of the AccountController is:

[HttpPost]
[Authorize]
[ValidateAntiForgeryToken]
public ActionResult LogOff()
<
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie, DefaultAuthenticationTypes.ExternalCookie);
if (HttpContext.Request.Cookies[«.AspNet.ApplicationCookie»] != null)
<
var c = new HttpCookie(«.AspNet.ApplicationCookie»);
c.Expires = DateTime.Now.AddDays(-1);
Response.Cookies.Add(c);
>

if (HttpContext.Request.Cookies[«__RequestVerificationToken»] != null)
<
var c = new HttpCookie(«__RequestVerificationToken»);
c.Expires = DateTime.Now.AddDays(-1);
Response.Cookies.Add(c);
>

return RedirectToAction(«Login», «Account»);
>

The strange thing is why clearing the Browser cache in the Browser Settings without closing the browser, allows to login again from scratch (showing the Microsoft login).

I read that maybe is related with an Owin Securiry Stamp that is stored in the browser cache, but how we can remove that programatically.

Clearing out «temporary asp.net files»

[Important note, 9 March 2012. I wrote the following blog post some time ago with mainly IIS6 and Windows Server 2003 in mind and as I state – for non-production scenarios. For later versions of IIS the folder permissions I reassert using XCACLS are incomplete. Specifically they do not include BUILTINIIS_IUSRS. I also do not discuss the fact that on 64-bit operating systems there will be a Framework64 folder as well as a Framework folder. The suggestion by Christopher Lewis in the blog comments is a good one.]

When I am testing out issues with ASP.NET dynamic compilation and shadow copying, I frequently need to ensure the contents of the «temporary asp.net files» folder have been removed so that I get a clean and consistent repro each time.

Normally I just do an IISRESET /STOP, delete the files manually and then do an IISRESET /START.

But I got bored of that so thought I would try to automate it with a command file.

First thought was to do a DEL /S «C:WINDOWSMicrosoft.NETFrameworkv1.1.4322Temporary ASP.NET Files*.*»

This worked, but left the directory structure in place.

Remove ViewState from an ASP.NET Page

In this post, we will explore how to remove ViewState from your asp.net page and instead store it in a session. This could be useful when pages are to be served to devices with less resources.

Since HTTP is a stateless protocol, the state of controls is not saved between postbacks. One of the ways to get around this is to use ViewState in ASP.NET. ViewState is the means of storing the state of server side controls in HTML hidden fields, between postbacks. For this example, on a button click, I have set the label text to ‘I Love DevCurry’. Here’s a sample viewstate shown below.

Although the viewstate looks decrypted, but it isn’t. It is a Base64 encoded string which can be decoded. You can easily use an online viewstate decoder to decode the string or read my post How to view information in ViewState using ASP.NET to create a simple decoder tool of your own.

Here’s the decoded viewstate


As you can see, the string that was stored in the viewstate can be seen once we have decoded the viewstate. You have a couple of options to protect your ViewState.

1. Encrypt ViewState — You can encrypt a ViewState by using the viewStateEncryptionMode option in your web.config or in your page.

2. The second option is to use the ViewStateUserKey Property to prevent web attacks.

3. The third option and the focus of this article is to remove the ViewState from the page and instead store it in a session state.

By default, view state is stored on the client using the HiddenFieldPageStatePersister class. However this option can be overridden and instead ViewState can be saved in a Session state using the PageStatePersister class. Add the following code in the code-behind of your page

That’s it. Run the page > Right click > view source > copy the viewstate and run it in the viewstate decoder. Here’s what you get.

As you can see, the viewstate no longer holds any values. That is because the viewstate is now stored in the session state.

Note: Use this approach carefully and selectively as you may run out of memory if you overuse it.

About The Author

Suprotim Agarwal, Developer Technologies MVP (Microsoft Most Valuable Professional) is the founder and contributor for DevCurry, DotNetCurry and SQLServerCurry. He is the Chief Editor of a Developer Magazine called DNC Magazine. He has also authored two Books — 51 Recipes using jQuery with ASP.NET Controls. and The Absolutely Awesome jQuery CookBook.

Follow him on twitter @suprotimagarwal.

3 comments:

Just a tip — the code above is what is recommended in the MSDN documentation, but it has a bug. If you use GridView’s or other controls that utilize Control State on your page, you may run into problems. The solution is to override the property like so:

private PageStatePersister _PageStatePersister;
protected override PageStatePersister PageStatePersister
<
get
<
if(_PageStatePersister == null)
<
_PageStatePersister = new SessionPageStatePersister(this.Page);
>
return _PageStatePersister;
>
>

That way, you can hang on to the same instance of the SessionPageStatePersister during the lifetime of the Page, which will help keep the control state operations consistent.

That’s a good tip Mike. ControlState in a Grid cannot be disabled (if i recall correctly) so that means your tip is applicable to everyone using the Gridview + who’s storing viewstate in the Session. Is the bug documented officially and can you point me to a link.

On a side not to all readers, it is recommended to explicitly use ControlState «only for small amounts of critical data that are essential for the control across postbacks». It is not a replacement for viewstate.

Hey, thanks. This topics seemed obscuure but was easy to follow.

I was sure my view state data was encrypted but apparently not.

As you say, you need to be careful with this approach as it’ll use much more memory on the server. However, it is still useful to know how this can be overridden.

Removing master page at runtime [Answered] RSS

5 replies

Last post Jan 29, 2014 03:06 PM by John_Grace

Shortcuts

Removing master page at runtime

Oct 15, 2007 07:59 AM | sbadriprasad | LINK

Has anyone faced this kind of situation? Any help on this will be highly appreciated.

Re: Removing master page at runtime

Oct 15, 2007 09:09 AM | ca8msm | LINK

It’s probably easier to create a second blank Master Page so you can set it to use that rather than trying to remove all references to a Master Page. You can then set it like this:


Re: Removing master page at runtime

Oct 15, 2007 09:38 AM | sbadriprasad | LINK

ca8msm

It’s probably easier to create a second blank Master Page so you can set it to use that rather than trying to remove all references to a Master Page. You can then set it like this:

if my page1.aspx had materpage1. master and i am calling this page1.aspx from page2.aspx, then where should i use your code? to change the blankmaster.master. since i said i dont want to touch the old page that is page1.aspx in this example how to chage the master page of page1 from page2.

Edited: can you please explain in C#.

Re: Removing master page at runtime

Oct 16, 2007 11:08 PM | Amanda Wang — MSFT | LINK

Base on your description, you want the content page to remove the master page at runtime,that is to as say, do not use the master page at runtime, right?

But if the content page used the master page, the aspx file will like this:

asp:Content > «Content1» ContentPlaceHolder > «Main» Runat= «Server» >
asp:Content >

So it is very different with the normall page, so the content page only can work fine with the master page, or else it will throw the error message.

About how the master page and the content page work, you can read this article: http://www.odetocode.com/Articles/450.aspx

But you can try to implement it by using the flexible method.

You can create a empty master page, there is nothing other than the contentplaceholder control and the html tags. So if the content page use this master page, the page only display itself. At the runtime. change the content page’s masterpagefile in the PreInit event programmatically.

If you do like this, will not disturb the other existed pages .

1. the empty master page:

!DOCTYPE html PUBLIC «-//W3C//DTD XHTML 1.0 Transitional//EN» «http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd»> html xmlns= «http://www.w3.org/1999/xhtml» >
head runat= «server» >
title >Untitled Page title >
head >
body >
form > «form1» runat= «server» >
div >
asp:contentplaceholder > «ContentPlaceHolder1» runat= «server» >
asp:contentplaceholder >
div >
form >
body >
html >

2. Set the content page’s masterpagefile programatically

void BasePage_PreInit( object sender, EventArgs e)
<
MasterPageFile = «

Amanda Wang
Microsoft Online Community Support

Please remember to mark the replies as answers if they help and unmark them if they provide no help.

Глава 8. Использование Master Pages в Microsoft ASP.NET

Master Pages (мастер-страницы) — технология Microsoft, впервые появившаяся в ASP.NET 2.0. Эта технология позволяет создать предопределенную компоновку страниц (например, заголовок (шапку), меню, поля для отображения информации, счетчики . ) и многократно применять ее к разным страницам приложения, наполняя элементы компоновки тем содержимым, которого требует контент страницы.

Параграф 1. Методика создания и использования Master Pages

Реализацией технологии мастер страниц являются два новых типа страниц: мастер страница и страница содержимого. Мастер страница — это шаблон страницы с некоторым начальным фиксированным содержанием. Она может включать любую комбинацию HTML элементов и кода, а также модифицируемые области — заполнители содержимого. Страница содержимого — страница, ссылающаяся на одну мастер страницу и получающая ее компоновку и заполнители. Кроме того, страница содержимого может добавлять данные в любой заполнитель.

Илон Маск рекомендует:  Что такое код gzrewind

Создадим обычным образом решение сайта (File/New/WebSite), после чего удалим из директивы «Page» все, кроме самой директивы и параметра «Language» (можно, при желании, удалить и файл Default.aspx.cs, если основная страница будет отображать только то, что ей предоставят мастер-страница и страницы контента):

Добавим мастер-страницу к решению, для чего, в контекстном меню Solutation Explorer узла решения выбираем пункт «Add New Item» (Рис.1). Задаем «Templates» — «Master Page», определяем «Name» — имя мастер-страницы, задаем «Language», ставим галочку в чекбоксе «Place code in separate file» и нажимаем кнопку ADD. В Solutation Explorer появился узел, состоящий из двух файлов — MasterPage.master и MasterPage.master.cs (Рис.1). Это и есть наша мастер страница.

Рис.1 Добавление мастер страницы к решению

Мастер-страница может содержать HTML код страницы и может содержать любые контролы, сценарии и т.п., то есть все, что может содержать любая Web страница. Кроме того, мастер-страница (и только она и страницы, для которых она является старшей) может содержать (или не содержать) контролы ContentPlaceHolder. Этот элемент определяет область, которая может быть переопределена страницей, вызываемой из мастер-страницы.


Рассмотрим содержимое файлов шаблона мастер страницы:

Код в файле MasterPage.master имеет директиву «Master» ( вместо директивы «Page») — в остальном, он мало отличаются от кода обычной Web страницы. Новым может быть лишь появление контрола «ContentPlaceHolder» — это элемент определяет область, которая может быть переопределена конкретной страницей содержимого.

Прикрепленный код в MasterPage.master.cs, говорит о том, что класс MasterPage является наследником класса System.Web.UI.MasterPage. В нем мы можем выполнять любые действия на стороне сервера, как и для обычной страницы.

Осталось добавить нашу мастер-страницу к файлу решения, для чего, в файле Default.aspx добавляем параметр MasterPageFile=»

Обратим внимание, что значение параметра MasterPageFile начинается с

/. Это означает, что мастер страница находится не в предопределенной папке MasterPages, а в корневой директории решения (хотя, можно и создать такую папку). Причина отсутствия тэгов , , , — они уже есть в мастер-странице и ни в одной другой странице решения быть не могут.

Мастер страницу можно добавлять в решение и через включение объявления в web.config (

), но, в силу ряда недостатков и ограничений, этот путь не рекомендован разработчиками.

Если выполнить решение на данном этапе, то в браузере отобразится пустая страница. Для того, чтобы страница не была пустой, наполним мастер страницу некоторым содержанием.

Добавим страницы «main» и «warehouse» к решению, для чего, в контекстном меню Solutation Explorer узла решения выбираем пункт «Add New Item». Задаем Templates — Web Form, определяем «Name» (имя «main» и «warehouse» соответственно), определяем «Language» — «VisualC#», ставим галочку в чекбоксе «Place code in separate file» и в чекбоксе «Select Master Page» , нажимаем кнопку ADD. После выбора MasterPage.master (он пока у нас один) в окне Select a Master Page в Solutation Explorer появятся узлы, состоящие из двух файлов с расширениями, как и у обычной страницы (.aspx, aspx.cs).

Далее сформируем HTML код мастер страницы (рекомендуется просто перенести следующий код в «master.aspx» файл и посмотреть разметку в дизайнере формы):

Здесь мы ввели в качестве элемента разметки таблицу, хотя можно использовать и другие тэги, например, тэг «div». Файлы «main.aspx» и «warehouse.aspx» — это страницы, которые должны переопределять содержимое contentPlaceHolder1. Они имеют расширение «.aspx», как и обычные страницы. В тоже время, если файлы «.aspx.cs» ничем не отличаются от обычных файлов прикрепленного кода, то файлы «.aspx» имеют одну особенность — элементы «asp:Content» (для файла main.aspx):

Все, что будет помещено внутри тэга «asp:Content» с . создавать обработчики событий элементов:

В дизайнере формы мастер страница и страница «main.aspx» выглядят, как показано на Рис.2.

Рис.2 Мастер страница и страница содержания «main.aspx»

Как видно из рисунка, уже на этапе разработки формы страницы содержания включаются в мастер-страницу и составляет с ней как бы одно целое. Иначе (в нашем примере), cодержимое «суммарной» страницы будет меняться в зависимости от вызова и контента вызываемых по гиперссылкам страниц — «main.aspx» или «warehouse.aspx». И, кроме того, можно использовать код и в мастер-странице, например:

Добавления серверного кода в страницах содержимого выполняется обычным образом:

Для кода страницы «warehouse.aspx.cs» ограничимся просто выводом текста:

Теперь, при старте, будет выведен текст «Наша фирма лучшая в мире!» и, далее, при выборе ссылок, получим результат, показанный на Рис.3.

Обратим внимание, что основная страница наследует не только содержимое контентов, но и заглавие («Title») страницы.

Рис.3. Выполнение решения сайта

Параграф 2. Вложенные мастер страницы

Web сайт может содержать множество мастер-страниц и есть возможность вкладывать одни мастер-страницы в другие.

Покажем множественное наследование мастер-страниц, для чего, несколько изменим решение:

Вначале добавим к решению еще одну мастер-страницу (также, как мы добавили первую). В решении появятся узлы «MasterPage2.master» и «MasterPage2.master.cs».

Изменим файл «Default.aspx» так, что для него теперь мастер-страницей будет «MasterPage2.master».

В «MasterPage2.master» запишем код:

В «MasterPage2.master,cs» запишем код обработчика нажатия кнопки:


Рис.4. Использование вложенных мастер-страниц

Красным на Рис.4. обозначено то, для чего собственно и используется вложение мастеров. Вложение позволяет выполнить некоторую распределенную последовательности действий по формированию содержимого страницы. Причем, каждое промежуточное звено может быть многократно использовано в различных их сочетаниях.

Далее, результат выполнения решения будет полностью аналогичен предыдущему примеру (Рис.3.).

Параграф 3. Логотипы в Master Pages

Добавим рисунок в решение, для чего в контекстном меню Solutation Explorer узла решения выбираем пункт «Add Existing Item», выберем рисунок, помещенный в директорию решения. Вместо надписи «Trade firm OOO ‘Horns and hoofs'» внесем ссылку на рисунок, как показано ниже (рекомендуется просто перенести следующий код в «master.aspx» файл и посмотреть разметку в дизайнере формы — Рис.5.):

Рис.5. Решение с логотипом

Результат — на всех страницах сайта будет присутствовать наш рисунок (Рис.6.):

Рис.6. Использование логотипов в Master Pages

Если используется HTML тэг «img» (ровно, как и тэги «a»), то при развертывании приложения придется использовать полный относительный путь к рисунку (включая доменное имя), поэтому рекомендуется использовать преобразование элемента к серверному (runat=»server»). В этом случае, сервер преобразует элемент к серверному «HtmlImage» и, поскольку этот объект создается после объекта «Page» (при создании мастер страницы), то Asp.Net будет интерпретировать все пути относительно мастер страницы.

Параграф 4. Изменение и добавление контентов

Если мы удалим элемент «Conten» со страницы содержимого, например из файла «main.aspx», то, в силу наличия в директиве «Page» свойства MasterPageFile=»

/MasterPage.master», «ContentPlaceHolder1» будет отображен в дизайнере для страницы «main.aspx» (в виде серого квадратика), но без содержимого. Для добавления «Content», кликнем мышкой на треугольничке в правом верхнем углу элемента «ContentPlaceHolder1» и в контекстном меню (левый клик — появляется как многострочное, или правый клик — двух строчное) выбираем пункт «Create Custom Content». Элемент «Content» будет добавлен к странице (Рис.7.).

Если потребуется удалить контент, то необходимо выбрать пункт «Default to Mastr’s Content».

Рис.7. Добавление и удаление элементов Content

Параграф 5. Значение контента по умолчанию

Изначально «ContentPlaceHolder» мастер страницы пуст:

Уберем со страницы «warehouse.aspx», а на мастер странице в «ContentPlaceHolder1» добавим контрол «TextBox»:

Выполним решение и убедимся, что «TextBox» и его содержимое со страницы мастер окажутся встроенными в страницу «warehouse.aspx» (другие страницы ведут себя, как и ранее). Таким образом, при неопределенном контенте страниц содержимого «ContentPlaceHolder» страницы заполняется содержимым по умолчанию из «ContentPlaceHolder» мастер-страницы (Рис.8.).

Рис.8. Контент по умолчанию

Заметим, что контент по умолчанию может быть только полностью заменен и не может использоваться совместно с контентом страниц содержимого.

Параграф 6. Динамическое задание мастер страницы

Asp.Net загружает мастер-страницу сразу после генерации события «PreInit». Таким образом, для того, чтобы иметь возможность изменять мастер страницу программно, необходимо выполнять это в событии «Page_PreInit». Задание выполняется просто. В предыдущем примере можно убрать в файле «Default.aspx» в директиве «Page» атрибут «MasterPageFile» и поместить его в качестве кода в обработчик события «PreInit». Мастер-страницей в обработчике события «PreInit» зададим «MasterPage2.aspx». Выполнив решение, мы получим результат тот же, что мы видели на Рис.4. Даже если не будем убирать связь с другой мастер страницей в директиве «Page», то результат не изменится.

Молчанов Владислав 21.3.2006г.

Application.Contents.Remove Method

The Contents.Remove method for ASP deletes an item from the Application.Contents collection.

Parameters

id
A string or an integer identifying the item in the colleciton to be removed. If id is a string, the method searches the contents collection for an item with that name and removes it. If id is an integer, the method counts that number of items from the start of the collection and removes the corresponding item.

When id is an integer, the index numbers of all items in the collection are updated. It is recommended that you always identify an item in a collection by its name.

Return Values

This method has no return values.


Remarks

Although ASP collections are similar to the Visual Basic Collection object, there are some differences. ASP collections support the Count property and the Item, Remove, and RemoveAll methods. They do not support the Add method.

Example Code

The following example adds three items to the Application.Contents collection and removes two. At the end of the example, Application(str3) is the first item instead of the third.

Requirements

Client: Requires Windows XP Professional, Windows 2000 Professional, or Windows NT Workstation 4.0.

Server: Requires Windows Server 2003, Windows 2000 Server, or Windows NT Server 4.0.

I created a sample ASP.NET MVC application that I plan to post at the http://ww.ASP.net/mvc website. While the application was being code reviewed by the ASP.NET MVC Feature team, a surprising objection surfaced.

The application is extremely simple. It contains a view that renders a list of database records. Next to each record, there is an Edit link and a Delete link (see Figure 1). Pretty standard stuff. Or, so I thought…

Figure 1 – A Grid of database records

Here’s the objection. You should not use a link for deleting a record. Using a Delete link opens up a security hole.

The Security Objection

In theory, someone could send an email to you that contains an image. The image could be embedded in the message with the following tag:

Notice that the src attribute points at the Delete() method of the Home controller class. Opening the email (and allowing images in your email client) will delete record 23 without warning. This is bad. This is a security hole.

I had come across this security concern in the past, but had not given it much thought. Originally, Microsoft enabled you to invoke ASMX Web Services by performing a HTTP GET request. In .NET Framework 1.1, HTTP GET requests were disabled by default (You can re-enable HTTP GET requests in the Web.config file). This change in behavior was made to prevent these types of HTTP GET security attacks.

The REST Objection

There is one other reason that you should not use a link to perform deletes in an application. REST purists would defend the idea that GET requests should not change the state of your application. In other words, performing a GET operation should be a safe operation that has no side effects.

Илон Маск рекомендует:  Является ли указанная страница - домашней (IE)

For example, you don’t want a search engine to delete all of the records in your application while crawling your website. Performing an HTTP GET should have no lasting effect on your application.

The proper HTTP operation to perform, when deleting a record, is an HTTP DELETE. The HTTP protocol supports the following HTTP operations:

· OPTIONS – Returns information about the communication options available (idempotent).

· GET – Returns whatever information is identified by the request (idempotent).

· HEAD – Performs the same operation as GET without returning the message body (idempotent).

· POST – Posts new information or updates existing information (not idempotent).

· PUT – Posts new information or updates existing information (idempotent).

· DELETE – Deletes information (idempotent).

· TRACE – Performs a message loop back (idempotent).

· CONNECT – Used for SSL tunneling.

These operations are defined as part of the HTTP 1.1 standard which you can read about at http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html.

Notice that the description of an HTTP POST and HTTP PUT are identical. To understand the difference between a POST and a PUT, you need to understand what it means for an operation to be idempotent. An idempotent operation is an operation that has the same outcome no matter how many times that it is performed.

For example, if you perform a POST operation to create a new database record, then you can create a new database record every time that you perform the POST. A POST operation is not idempotent because it can have a different effect on your application each time the operation is performed.


If, on the other hand, you perform a PUT operation, then the very same database record must be created each time you perform the PUT. A PUT operation is idempotent because performing a PUT operation a thousand times has the same effect as performing the operation one time.

Notice that an HTTP DELETE is also idempotent. Performing the same HTTP DELETE request multiple times should have the very same effect on your application each time the request is made. For example, the request /Home/Delete/23 should delete database record 23, and no other database record, regardless of how many times the request is made.

HTML Supports Only GET and POST

So, the proper thing to do when deleting a database record is to perform an HTTP DELETE operation. Performing an HTTP DELETE does not open a security hole and it does not violate REST principles.

Unfortunately, standard HTML does not support HTTP operations other than GET and POST. A link always performs a GET and a form can perform either a GET or POST. HTML does not support other types of HTTP operations.

According to the HTML 3.1 specification, the HTML FORM tag only supports GET and POST. It does not support other HTTP operations such as DELETE or PUT. See http://www.w3.org/TR/REC-html32.html#form. Furthermore, Internet Explorer only supports GET and POST (see http://msdn.microsoft.com/en-us/library/ms534167(VS.85).aspx).

Performing Ajax Deletes

If you are willing to go beyond standard HTML, you can perform HTTP DELETE operations by taking advantage of AJAX. The XmlHttpRequest object supports any of the HTTP operations. Therefore, if you are willing to make your application depend on JavaScript, then you can do everything the right way.

The Home controller in Listing 1 contains an Index() and Delete() method. The Index() method returns all of the movies from the Movies database and the Delete() method deletes a particular movie with a particular Id (this controller uses the Entity Framework).

Listing 1 – ControllersHomeController.cs

Notice that the Delete() method is decorated with an AcceptVerbs attribute. The Delete() method can only be invoked by an HTTP DELETE operation.

The Index view in Listing 2 displays the movies from the Movies database table within an HTML table. A Delete link is rendered next to each movie record (see Figure 2).

Listing 2 – ViewsHomeIndex.aspx

Deletes are performed with an Ajax call. The Delete link invokes the JavaScript deleteRecord() function. This function uses the Microsoft ASP.NET AJAX WebRequest object to perform an Ajax call. The WebRequest performs an HTTP DELETE operation.

After the DELETE operation completes, the JavaScript deleteCompleted method is called. This method reloads the current page (a more elegant approach here would be to use the new ASP.NET AJAX Client Template functionality coming with the next version of ASP.NET AJAX. That way, you could just update the grid without reloading the entire page).

Figure 2 – The Index view

But, I Don’t Want to Depend on JavaScript

Many developers do not want their websites to depend on JavaScript. In other words, they want their websites to continue to work with JavaScript turned off. There are somewhat legitimate reasons for this requirement. Not all mobile devices support JavaScript (although most do). And, there are accessibility concerns about JavaScript (although Aria should fix these accessibility problems).

If you want your website to work with JavaScript disabled then you can’t perform an HTTP DELETE when deleting a database record. Instead, you should perform an HTTP POST. An HTTP POST does not expose the same security hole as an HTTP GET operation.

You can use the AcceptVerbs attribute to prevent a controller action from being invoked unless it is invoked with an HTTP POST operation. So, the Delete() action would look like this:

Unfortunately, the only way to perform an HTTP POST with standard HTML is to use a tag. Furthermore, you must use an , , or tag to create a button for deleting a record.

There is no such thing as an tag. That’s a shame, because links look better than buttons. HTML should not tie appearance to behavior, but it does. You should be able to make a Delete link to delete a record.

The best option here is to use the tag. That way, you can make the Delete and Edit links look the same when displaying a grid of database records. Because I did not want to make my sample application depend on JavaScript, this is the approach that I am taking in the sample application.

The non-JavaScript dependent Index view is contained in Listing 3.

Listing 3 – ViewsHomeIndex.aspx (no JavaScript)

I got the images for the Edit and Delete links from the Visual Studio image library (see Figure 3). You have these set of images on your hard drive at the following location:

C:Program FilesMicrosoft Visual Studio 9.0Common7VS2008ImageLibrary

Figure 3 – Using Images for Edit and Delete

To get the images to align correctly, I added a vertical-align style to the table cells. I used the following style rules:

Conclusion


Don’t use Delete links to delete database records. Potentially, someone could perform a GET request and perform a delete without your consent or control.

The best option is to use JavaScript to perform an HTTP DELETE operation. Using JavaScript enables you to avoid the security hole. Using JavaScript also enables you to respect the semantics of the HTTP protocol.

If you don’t want your application to depend on JavaScript, the second best option is to perform an HTTP POST instead of an HTTP DELETE. Performing a POST operation requires you to use an HTML form. This can be ugly. However, you can improve the appearance of a form button by using an tag and adding Cascading Style Sheet styling.

Asp contents remove

I’m finding that Temp ASP .NET folders from C:\Windows\Microsoft.NET\Framework and Framework64 are filling up even after I delete the content.

This is causing my System Writer to disappear which makes the backup fail.

Could someone please tell me how I can stop these files from being created/growing or have them recycle.

PS — This is a Server 2012 R2 Essentials 64x Server.

Answers

I believe I have managed to fix my problem permanently without the use of daily scripts etc.

See here for a detailed explanation of the issue along with a detailed guide to resolve it. Kudos to crutledge from Peer Wisdom who made this guide.

The fix is to relocation the ASP.NET temp folder which is outside of the system state backup.

Create the new temp directory

The first thing we need to do is to create new directories for the ASP.NET temporary files. These commands will create new directories for the ASP.NET 2.0 and 4.0 temporary files on the D drive. You can choose any location, I just followed the guide.

Set Folder Permissions

Next we need to set the folder permissions to match the existing default directories. The easiest way to do this is with the ICACLS command. The first command removes the removes the inherited permissions and replaces them with a copy of the inherited permissions. Thus changes to the permissions of the drive (root directory) will not effect the new temporary directories. The remaining commands grant the required permissions.

Add Attribute tempDirectory To The compilation Tag In web.config

For ASP.NET to use temporary directories anywhere other than the default location, the directory must be specified using the tempDirectory attribute of the tag in the system web.config file. There is one file for each version of the .NET Framework. (Again, these are the same versions that have ASP.NET temporary directories, so there is no web.config file for .NET 3.0 and 3.5.) The tempDirectory attribute specifies the directory where the compiled machine code will be cached. The web.config file is a XML file that can be edited with Notepad.

For ASP.NET 2.0 32-bit, we would edit the web.config file and locate this tag:

and change it as follows to use the new temporary directory:

The web.config file is located in the CONFIG folder for the .NET Framework version. In our example, we will need to edit the following web.config files.

.NET Framework 2.0 – 32-Bit
C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\web.config

.NET Framework 2.0 – 64-Bit
C:\Windows\Microsoft.NET\Framework64\v2.0.50727\CONFIG\web.config

.NET Framework 4.0 – 32-Bit
C:\Windows\Microsoft.NET\Framework\v4.0.30319\CONFIG\web.config

.NET Framework 4.0 – 64-Bit
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\CONFIG\web.config

Restart IIS

For the changes made to the web.config files to take effect, IIS has to be restarted. This is easily done from the command line.

Delete Files In The Old Temporary Directories

Now we need to delete the files in the old ASP.NET temporary directories so they are no longer part of the system state. These files are actually in a subfolder named root, so we’ll actually delete this folder along with all it’s files and subfolders. Again, this is easily done from the command line.

Restart The Cryptographic Service

To get the VSS System Writer back, we must restart the service that controls it, which as previously mentioned, was the Cryptographic Service.

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL