Вот то, как мы делаем это. Обратите внимание, что существует, вероятно, больше граничных условий, чем Вы понимаете на первый взгляд.
Это - вторая версия, развернутая для 5x больше производительности (и да, я сравнил его). Я полагал, что оптимизирую его, потому что эта функция может быть вызвана сотни времен на страницу.
///
/// Produces optional, URL-friendly version of a title, "like-this-one".
/// hand-tuned for speed, reflects performance refactoring contributed
/// by John Gietzen (user otac0n)
///
public static string URLFriendly(string title)
{
if (title == null) return "";
const int maxlen = 80;
int len = title.Length;
bool prevdash = false;
var sb = new StringBuilder(len);
char c;
for (int i = 0; i < len; i++)
{
c = title[i];
if ((c >= 'a' && c <= 'z') || (c >= '0' && c <= '9'))
{
sb.Append(c);
prevdash = false;
}
else if (c >= 'A' && c <= 'Z')
{
// tricky way to convert to lowercase
sb.Append((char)(c | 32));
prevdash = false;
}
else if (c == ' ' || c == ',' || c == '.' || c == '/' ||
c == '\\' || c == '-' || c == '_' || c == '=')
{
if (!prevdash && sb.Length > 0)
{
sb.Append('-');
prevdash = true;
}
}
else if ((int)c >= 128)
{
int prevlen = sb.Length;
sb.Append(RemapInternationalCharToAscii(c));
if (prevlen != sb.Length) prevdash = false;
}
if (i == maxlen) break;
}
if (prevdash)
return sb.ToString().Substring(0, sb.Length - 1);
else
return sb.ToString();
}
Для наблюдения предыдущей версии кода это заменило (но функционально эквивалентно, и 5x быстрее), история пересмотра представления этого сообщения (нажмите на ссылку даты).
кроме того, RemapInternationalCharToAscii
исходный код метода может быть найден здесь .
Для низкотехнологичного решения, которое хранит скрипт в шаблоне страницы, вы можете добавить его в свой HTML (это может быть в $ (document) .ready ()
] вместо этого):
<script type="text/javascript">
var missingInfo = '<%= this.MissingInfo %>' == 'True';
if (missingInfo) {
alert('Not enough information. Please try again.');
}
</script>
И добавьте защищенное свойство на свою страницу:
private bool missingInfo = false;
protected bool MissingInfo {
get { return this.missingInfo; }
}
protected void Button1_Click(object sender, EventArgs e) {
// Button1 stuff ...
// ... then if you want to show the alert
this.missingInfo = true;
}
protected void Button1_Click(object sender, EventArgs e)
{
ScriptManager.RegisterStartupScript(
this,
this.GetType(),
"popup",
"alert('hello');",
true);
}
string script = string.Format("alert('this is alert');");
ScriptManager.RegisterClientScriptBlock(Page, typeof(System.Web.UI.Page), "redirect", script, true);
Хотя в примере кода в других ответах используется предупреждение, это всего лишь пример. Поместите свою функцию вместо предупреждения, и у вас будет всплывающее окно.
Вот код Дарина с вызовом вашей функции:
protected void Button1_Click(object sender, EventArgs e) {
ScriptManager.RegisterStartupScript(
this,
this.GetType(),
"popup",
"computeCorrectValue(parameter);",
true);
}
Хотя я действительно не уверен, где вы получаете параметр, который передается в вашу функцию.