Беспокойство по поводу истории браузера и кнопки «Назад» вызовет головную боль и генитальные бородавки. Есть встроенные средства для решения этой проблемы.
Ваша ссылка / кнопка выхода из системы должна указывать на страницу, содержащую этот код, а также все, что вы хотите.
[vb.net]
Imports System.Web.Security
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles MyBase.Load
Session.Abandon()
FormsAuthentication.SignOut()
End Sub
[c #]
using System.Web.Security;
private void Page_Load(object sender, System.EventArgs e)
{
// Put user code to initialize the page here
Session.Abandon();
FormsAuthentication.SignOut();
}
Код взят с этой страницы и действителен, но страница трудна для глаза.
Хороший Вопрос / Ответ относительно поведения кнопки можно найти здесь здесь .
Обновление:
в соответствии с беседой, которую я веду с Мэтью, отключение кэширования на отдельных страницах, которые являются чувствительными или изменчивыми, можно сделать с помощью следующего кода:
Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
Мне любопытно узнать, работает ли он для вас так же, как и для меня.
Ваш метод может быть объявлен как принимающий массив параметров с помощью params
:
void F(params int[] foo) {
// Do something with foo.
}
Теперь вы можете передать произвольное число int
s в метод, или массив int
. Но при объявлении фиксированного метода вы не можете расширять массив на лету, как вы можете в Ruby, потому что параметры обрабатываются по-другому под капотом (я считаю, что это другое в Ruby), и потому что C # не такой динамичный.
Теоретически вы можете использовать отражение для вызова метода для достижения того же эффекта (при вызове отраженного метода всегда принимается массив параметров).
Если вы объявляете аргументы своей функции с помощью ключевого слова params , вы можете передать в массиве или произвольное количество отдельных параметров.
Например:
public class Foo
{
public static void Main()
{
int[] x = new int[] {1,2,3};
Bar(x);
Bar(10,11,12);
}
public static void Bar(params int[] quux)
{
foreach(int i in quux)
{
System.Console.WriteLine(i);
}
}
}
производит
1
2
3
10
11
12
Нет, у вас не может быть "автоматическое расширение" массива при передаче в качестве аргумента методу C #. Одним из способов моделирования этого является написание перегрузок методов:
MyMethod(int a, int b) { /* ... */ }
MyMethod(int[] c)
{
// check array length?
MyMethod(c[0], c[1]);
}
AnotherMethod()
{
int[] someArray = new[] {1,2};
MyMethod(someArray); // valid
MyMethod(1,2); // valid
}
Но, как уже упоминалось несколько других, проще (и несколько наоборот) использовать ключевое слово params
. В моем (и в вашем) примере всегда получаются отдельные a
и b
. С params
у вас всегда есть массив, с которым нужно иметь дело.
Вы можете сделать это:
void MyMethod(params MyType[] args)
{
}
MyMethod(myObject1, myObject2, myObject3);
MyType[] a = { new MyType(), new MyType() };
MyMethod(a);