Как отключить валидацию при нажатии определенных кнопок?Необходимо добавить атрибут CausesValidation="false" к кнопке, при нажатии на которую нет необходимости производить валидацию (например, logout):
<asp:Button runat="server" ID="btnLogout" CausesValidation="false" >Logout</asp:Button>
Как отобразить картинку из Базы Данных?Существует несколько способов решения данного вопроса.
Один из них – это написать отдельную .aspx страницу, для получения изображения. Получение изхображения и его вывод на экран будем производить в методе Page_Load.
void Page_Load(object sender, EventArgs e)
{
//Получаем значение идентификатора картинки
int id = Int32.Parse(Request.QueryString["ID"]);
//Создаем подключение к БД
using (SqlConnection myConn = new SqlConnection("server=Server;database=Images;User Id=sa;Password=asdasd;"))
{
//и получаем картинку по ее идентификатору
SqlCommand myCmd = new SqlCommand("select ImageBody from Image where ImageId = @id", myConn);
myCmd.Parameters.Add("@id", id);
myConn.Open();
using(SqlDataReader rdr = myCmd.ExecuteReader() )
{
// Проверка на существование записи
if (rdr.Read())
// пишем содержимое картинки клиенту.
Response.BinaryWrite(rdr.GetSqlBinary(0).Value);
}//DataReader уничтожен
}//Подключение к БД закрыто
}
Теперь, с любой другой страницы вывести картинку с ID равным 20 можно с помощью html тэга:
<IMG src="pic.aspx?ID=20">
Второй способ заключается в использование HttpHandler. HttpHandler это фильтр, обрабатывающий http запросы. Любой запрос, приходящий на ASP.NET приложение, будет обработан одним из HttpHandler. Для того чтобы написать собственный HttpHandler, у класса необходимо реализовать интерфейс IHttpHandler.
namespace ViewImage {
public class Image : IHttpHandler
{
public Image()
{
}
//Свойство, указывающее на то, может ли класс вызываться без повторной инициализации
bool IHttpHandler.IsReusable
{
get { return true; }
}
//Метод ProcessRequest, выполняющий обработку запроса
void IHttpHandler.ProcessRequest(HttpContext context)
{
//Получаем значение идентификатора картинки
int id = Int32.Parse(context.Request.QueryString["ID"]);
//Создаем подключение к БД
using (SqlConnection myConn = new SqlConnection("server=Server;database=Images;User Id=sa;Password=asdasd;"))
{
SqlCommand myCmd = new SqlCommand("select ImageBody from Image where ImageId = @id", myConn);
myCmd.Parameters.Add("@id", id);
myConn.Open();
using(SqlDataReader rdr = myCmd.ExecuteReader() )
{
// Проверка на существование записи
if (rdr.Read())
// пишем содержимое картинки клиенту.
context.Response.BinaryWrite(rdr.GetSqlBinary(0).Value);
}}//DataReader уничтожен
}//Подключение к БД закрыто
}
}
}
Кроме этого, необходимо зарегистрировать HttpHandler в файле web.config. Существует и другой способ, но о нем чуть ниже. Подключение HttpHandler производится при помощи параметра «httpHandlers», формат которого приведен ниже.
<httpHandlers>
<add verb="(verbs)" path="(путь к файлу)" type="(полное имя класса,имя сборки)" />
</httpHandlers>
В нашем случае запись в web.config выглядит следующим образом:
<httpHandlers>
<add verb="*" path="image.aspx" type="ViewImage.Image, ViewImage"/>
</httpHandlers>
Теперь при любом запросе файла image.aspx (реально файл не существует) обрабатывать этот запрос будет HttpHandler, код которого приведен выше. Для того чтобы вывести картинку с ID равным 13 можно использовать следующую строку:
<img src=”image.aspx?id=13”>
Существует еще один способ, который позволяет не регистрировать HttpHandler в web.config. Для этого необходимо создать файл с расширением ashx. Назавем его foto.ashx. Содержать же он будет всего одну строчку:
<%@ WebHandler class="ViewImage.Image, ViewImage" %>
Для отображения картинки с ID равным 15 при помощи данного способа, можно использовать следующую строку:
<img src="foto.ashx?id=15">
Как перенаправить запрос с текущей формы на другую?Способ №1
Если необходимо перенаправить форму только по нажатию одной кнопки, то можно сделать так:
<%@ Page language="c#"%>
<script runat="server">
void Page_Load(object sender, EventArgs e) {
_myButton.Attributes.Add("onclick",
"document.forms[0].setAttribute('action','page2.aspx');");
}
</script>
<form runat="server">
<asp:Button runat="server" id="_myButton" Text="Click Me"/>
</form>
Способ №2
Если необходимо перенаправлять форму всегда, можно сделать как описано ниже либо воспользоваться способом №3
<%@ Page language="c#"%>
<script runat="server">
void Page_Load(object sender, EventArgs e) {
RegisterOnSubmitStatement("submit",
"document.forms[0].setAttribute('action','page2.aspx');");
}
</script>
<form runat="server">
<asp:Button runat="server" id="_myButton" Text="Click Me"/>
</form>
Способ №3
Унаследоваться от базового класса HtmlForm и переопределить метод RenderAttributes, чтобы нормально обрабатывалось свойство Action, а затем использовать данный контрол вместо стандартного.
Как программно изменить заголовок (title) страницы?К сожалению, в ASP.NET нет стандартных средств для изменения заголовка странички, но это можно сделать с помощью нехитрых действий. Приведем два из них.
1. В .aspx файле пишем следующюу конструкцию вместо старого заголовка:
<title runat=server id=controlTitle>Title</title>
А в Code Behind добавляем следующие конструкции:
protected System.Web.UI.HtmlControls.HtmlGenericControl controlTitle;
...
controlTitle.InnerText = "New Title";
...
2. В .aspx файле пишем следующюу конструкцию вместо старого заголовка:
<title><%=Title%></title>
А в Code Behind добавляем следующие конструкции:
private string _title = "Default Title";
public string Title {
get { return _title; }
set { _title = value; }
};
...
this.Title = "New Title";
Как указать имя файла, который мы динамически отдаем пользователю?Для этого достаточно в ответ (Response) добавить заголовок "Content-Disposition".
Response.AddHeader("Content-Disposition", "attachment; filename=filename.txt");
Почему у DropDownList не обрабатывается событие SelectedIndexChanged?Для того чтобы на сервере у DropDownList сработало событие "SelectedIndexChanged" необходимо установить атрибут "AutoPostBack" равным true.
Примечание: Так же это относится к другим элементам управления ( TextBox, ListBox, CheckBox, RadioButton и.т.д), у которых есть серверное событие, возникающее при изменении их состония.
При попытке выполнить SQL запрос к MS Access базе возникает ошибка " В операции должен использоваться обновляемый запрос". Что делать?Наиболее частая причина данной ошибки в том, что база находится на NTFS разделе и у пользователя под которым запущенно Web-приложение (обычно ASPNET) просто неет прав на изменение. То есть необходимо дать ему разрешешние на изменение файла Базы данных.
После установки ASP.NET не отображаются web котролы, как побороть?Скорее всего IIS устанавливался после установки asp.net, поэтому asp.net в нем не зарегистрирован. Для того, чтоьы его зарегистрировать необходимо выполнить следующую команду:
%windir%\Microsoft.NET\Framework\v1.1.4322\aspnet_regiis.exe -i
После этого asp.net зарегистрируется в IIS и порблема решиться.