Eilon предполагает, что можно сделать это как это:
, Если у Вас есть больше чем одна кнопка, можно различать их путем давания каждой кнопке имени:
В Вашем методе действия контроллера можно добавить параметры, названные в честь имен тега ввода HTML:
public ActionResult DoSomeStuff(string saveButton, string cancelButton, ... other parameters ...) { ... }
, Если какое-либо значение отправляется на один из тех параметров, который означает, что кнопка была той, которая была нажата. Веб-браузер только отправит значение для одно кнопка, которая была нажата. Все другие значения будут пустыми.
if (saveButton != null) { /* do save logic */ } if (cancelButton != null) { /* do cancel logic */ }
мне нравится этот метод, поскольку он не полагается на свойство значения кнопок отправки, которое, более вероятно, изменится, чем присвоенные имена и не требует, чтобы JavaScript, который будет включен
, Видел: http://forums.asp.net/p/1369617/2865166.aspx#2865166
Стандарт имеет следующее в 3.6.2 / 3:
Это определяется реализацией, будет ли динамическая инициализация (8.5, 9.4, 12.1, 12.6.1) объекта из область пространства имен выполняется перед первым оператором main. Если инициализация отложена до какой-то точки во времени после первого оператора main, это должно произойти до первого использования любой функции или определенного объекта в той же единице трансляции, что и инициализируемый объект.
Но o Конечно, вы никогда не официально никогда не сможете сказать, когда происходит инициализация , поскольку инициализация произойдет до того, как вы получите доступ к variable! следующим образом:
// t1.cc
#include <iostream>
int i1 = 0;
int main () {
std::cout << i1 << std::endl
// t2.cc
extern int i1;
int i2 = ++i1;
Я могу подтвердить, что g ++ 4.2.4 по крайней мере, похоже, выполняет инициализацию 'i2' перед main.
Проблема, которую хотелось решить с помощью этого правила, - это проблема динамической загрузки. Допуск не ограничивается динамической загрузкой и формально может иметь место для других случаев. Я не знаю реализации, которая использовала бы его для чего-либо еще, кроме динамической загрузки.
Давайте рассмотрим псевдокод:
В DLL:
static int ItsDllVar = 1;
int EXPORTED_FUNCTION() { return ItsDllVar; }
В приложении:
static int AppVar1 = 2;
static int AppVar2 = EXPORTED_FUNCTION() + AppVar1;
Итак, согласно статической инициализации AppVar2 получает 1 + 2 = 3
Ленивая инициализация применима для локальных статические переменные (независимо от DLL)
int f()
{
static int local_i = 5;//it get's 5 only after visiting f()
return local_i;
}