Sergey
- Вопросы
- Ответы
Имя | Sergey |
Возраст | Неизвестно |
Сайт | Неизвестно |
Неизвестно | |
Участвует в проекте | 1109 дн., 12 час., 52 мин. |
Последняя активность | 512 дн., 11 час., 12 мин. назад |
Ответы
Перейти к вопросу →
Можно встроить тег <meta name="robots" content="...">
внутрь раздера head
страницы. Такой способ удобно применять, когда механизм отказа в индексации должен работать динамично. Возможные значения атрибута content
:
NOINDEX - запрещает индексирование документа;
NOFOLLOW - запрещает проход по ссылкам, имеющимся в документе;
INDEX - разрешает индексирование документа;
FOLLOW - разрешает проход по ссылкам, имеющимся в документе.
ALL – разрешает как индексирование документа, так и проход по ссылкам (равносильно INDEX, FOLLOW)
NONE – запрещает индексирование и проход по ссылкам (равносильно NOINDEX, NOFOLLOW)
Если META name="ROBOTS" в документе не указан и в файле robots.txt не запрещена его индексация, файл индексируется, и проход по ссылкам происходит, что равносильно
<META name="ROBOTS" content="index, follow">
или
<META name="ROBOTS" content="all">
Если нужно другое поведение, следует включить META name="ROBOTS"
между тегами <head>
и </head>
страницы, указав, какая обработка ему нужна. Например:
<META name="ROBOTS" content="index, nofollow">
Индексировать все, по ссылкам не переходить.
Строка
<META name="ROBOTS" content="none">
очень близка по смыслу запрету индексации в файле robots.txt.
Недостаток такого подхода по сравнению с robots.txt состоит в следующем. Если поисковая система видит, что адрес запрещен файлом robots.txt, то она не станет скачивать и включать в индекс соответствующую страницу. А чтобы увидеть тег meta
, поисковику приходится предварительно скачать код страницы. Эта лишняя нагрузка на поисковик неизбежна если решение о запрете индексации производится динамически; в остальных случаях предпочтительнее использовать robots.txt а не meta robots
.
При обнаружении в теге противоречивых инструкций (включенных по ошибке, принимаются разрешающие). Например:
<META name="ROBOTS" content="index, nofollow, follow">
Равносильно
<META name="ROBOTS" content="index, follow">
Перейти к вопросу →
Есть способ, правда это танец с бубном
Можно сделать ascx embedded, то есть включить его в сборку и серез рефлектор вытаскивать его, в статье ASP.NET: Reusing Web User Controls and Forms описано:
protected void Page_Load(object sender, EventArgs e)
{
Control ctrl = LoadControl("/App_Resource/WebApplicationControls.dll/"+
"WebApplicationControls.WebUserControl1.ascx");
PlaceHolder1.Controls.Add(ctrl);
}
как вытаскивать с помощью виртуального провайдера
Перейти к вопросу →
Делает запрос на сайт, получает куки. Делает на тот же сайт запрос (второй раз) с полученными ранее куками и получает новые куки.
HttpWebRequest h1 = (HttpWebRequest) WebRequest.Create("http://site.ru");
h1.AllowAutoRedirect = false;
CookieContainer cc = new CookieContainer();
h1.CookieContainer = cc;
HttpWebResponse r1 = (HttpWebResponse)h1.GetResponse();
foreach (Cookie c in r1.Cookies)
{
textBox1.Text += "\r\n cook1:" + c;
cc.Add(c);
}
HttpWebRequest h2 = (HttpWebRequest)WebRequest.Create("http://site.ru");
h2.AllowAutoRedirect = false;
h2.CookieContainer = cc;
HttpWebResponse r2 = (HttpWebResponse)h2.GetResponse();
foreach (Cookie c in r2.Cookies)
textBox1.Text += "\r\n cook2:" + c;
Естественно создавать второй request не обязательно
CookieContainer cookies = new CookieContainer();
HttpWebRequest postRequest = (HttpWebRequest)WebRequest.Create(site);
postRequest.CookieContainer = cookies; // note this
postRequest.Method = "POST";
postRequest.ContentType = "application/x-www-form-urlencoded";
using (Stream stream = postRequest.GetRequestStream())
{
stream.Write(buffer, 0, buffer.Length);
}
Перейти к вопросу →
Вот ряд изменений, которые есть в ASP.NET MVC 2 RC :
- скрипты валидации перемещны в отдельный файл;
- скрипты валидации теперь можно включать как сначала разметки, так и внизу для клиентской оптимизации;
- скрипты валидации поддерживают глобализацию;
- метод Html.ValidationSummary может теперь отображать не сразу все ошибки валидации, а только те, которые вычисляются в модели, чтобы остальные показывались рядом с элементами управления и не дублировались;
- шаблоны T4 в Visual Studio теперь генерируют код специфичный для версии .NET Framework
- разметка генерируемая через Add View теперь содержит использование Editor, EditorFor, Display и DisplayFor;
- теперь можно декларативно задать поведение кнопки и ее влияние на валидацию формы, вызывает валидацию или нет;
- теперь можно декларативно управлять тем, когда вызывается валидация: во время ввода, после смены фокуса, перед отправкой формы;
- был исключен метод Html.Substitute;
- инсталятор теперь не производит маппинг скриптов для IIS6 и IIS7 в режиме Integrated Mode, при нужде инструменты для самостоятельного маппинга лежат на codeplex.com.
Cписок ключевых фич, которые войдут в ASP.NET MVC 2. Среди них: Areas, ассинхронные Controller Actions, улучшенная поддержка Dynamic Data, улучшения в кешировании, валидации и другое.
Перейти к вопросу →
Использовал для этого JavaScript. За основу взял статью "Мой авторесайз IFRAME"
"Смысл в том, что ифрэйм внутри ифрэйма имеет доступ к главному окну, если он располагается на том же домене.
Открываю я два ифрэйма, потому как решение с document.domain имеет свои недостатки, которые на моем сайте довольно тяжело устранить.
При этом решении не портится история браузера, т.к. рабочие ифрэймы каждый раз заново создаются."
Перейти к вопросу →
Тег <button>
определяет кнопку.
Внутри элемента кнопки вы можете разместить контент, текст или изображение. Вот в чем разница между этим элементом и кнопкой, созданной с помощью элемента input. Всегда указывайте тип атрибута для кнопки. Тип по умолчанию для Internet Explorer является "button", а в других браузерах (и в спецификации W3C) это "submit".
Тег <button>
поддерживается всеми современными браузерами.
Разница применения в HTML и XHTML - никакой
Важно: Если вы пользуетесь элемент кнопка в HTML форме, разные браузеры будут представлять различные значения. Internet Explorer будет представлять текст между тегами <button>
и </button>
, а другие браузеры будут представить содержание значения атрибута value
. Поэтому В HTML форме предпочтительнее использовать элемент input
.
Кнопки <button>
предлагают богатые возможности рендеринга: элемент <button>
может быть содержание, например, различные картинки, без использования специфических классов, поэтому иногда все-теки разумнее использовать его.
Перейти к вопросу →
Нужно добавить в reference WUApiLib "C:\windows\system32\Wuapi.dll"
WUApiLib.AutomaticUpdatesClass auc = new WUApiLib.AutomaticUpdatesClass();
bool active = auc.ServiceEnabled;
MSDN:
Свойство
ServiceEnabled
показывает, доступны ли все компоненты, требуемые для автоматического обновления (Automatic Updates).
Перейти к вопросу →
Вот пример на C: Пример: Проверка правильности расстановки скобок v1 Файл Main.cpp
#include "stdafx.h"
namespace mystack {
int stack_head = 0;
const int stack_max_length = 128;
char stack_holder[stack_max_length];
void error(char *message) {
printf("Error: %s", message);
abort();
}
void push(char ch) {
if (stack_head < stack_max_length)
stack_holder[stack_head++] = ch;
else
error("Stack holder is full");
}
char pop() {
if (stack_head > 0)
return stack_holder[--stack_head];
else
error("Stack is empty");
assert(false);
return 0;
}
bool is_empty() {
return stack_head == 0;
}
} // namespace mystack
// --------------------------------------------------------------------------------------
namespace string_analizer {
void error(const char *message) {
printf("Analizer error: %s", message);
abort();
}
bool is_open_bracket(char ch) {
return ch == '(' || ch == '{' || ch == '[';
}
char get_pair(char bracket) {
switch(bracket) {
case '(' : return ')';
case '{' : return '}';
case '[' : return ']';
default : error("Unknown bracket");
}
assert(false);
return 0;
}
bool is_close_bracket(char ch) {
return ch == get_pair('(') || ch == get_pair('{') || ch == get_pair('[');
}
void analize(const char *str) {
for(int i=0; str[i]!=0; i++) {
if (is_open_bracket(str[i]))
mystack::push(str[i]);
if (is_close_bracket(str[i])) {
if (mystack::is_empty())
error("Invalid balance (close bracket without open bracket)");
char ch = mystack::pop();
if (get_pair(ch) != str[i]) error("Invalid pair");
}
}
if (!mystack::is_empty())
error("Invalid balance (open bracket without close bracket)");
}
} // namespace string_analizer
// --------------------------------------------------------------------------------------
namespace sa = string_analizer;
int main(int argc, char* argv[])
{
char buf[128];
printf("Enter expression to analize: ");
scanf("%s", buf);
sa::analize(buf);
return 0;
}
Перейти к вопросу →
Чаще всего удаляються все html теги и отрезается текст по нужной длине, но при этом не по середине слова
public string GetPlainText(string html)
{
var rexTag = new Regex("<[^>]*>");
var review = rexTag.Replace(html, " ").Trim();
var rexSpace = new Regex(@"\s+");
return rexSpace.Replace(review, " ").Trim();
}
public string GetPlainText(string html, int size)
{
if (size < 1)
{
throw new ArgumentOutOfRangeException("size", "Parameter cannot be negative or zero");
}
var review = GetPlainText(html);
int i = review.Length;
if (size < i)
{
i = review.LastIndexOf(" ", size);
if (i < 0)
{
i = 0;
}
}
return review.Substring(0, i);
}
Перейти к вопросу →
Можно использовать временную папку для asp.net
string filePath = System.IO.Path.GetTempPath() + @"\File.txt";
GetTempPath()
вернёт "C:\Documents and Settings\userName\ASPNET\Local Settings\Temp". Эта папка, в которой ASP.NET имеет права на чтение и запись.
Для доступа к системной папке temp придётся делать олицетворение, подробнее можно прочитать в MSDN