Этот ответ был включен в Сообщество ответ Wiki
ответ для этого - то, что это является неуказанным - вызов чистых результатов виртуальной функции в неопределенном поведении, если это не определяется (который это обычно не) (ISO/IEC 14882:2003 10.4-2). Некоторые реализации действительно просто помещают Нулевого указателя в vtable запись; другие реализации помещают указатель на фиктивный метод, который делает что-то подобное утверждению.
Примечание, что абстрактный класс может определить реализацию для чистой виртуальной функции, но что функция может только быть вызвана с синтаксисом квалифицированного идентификатора (т.е., полностью определив класс в имени метода, подобном вызову метода базового класса от производного класса). Это сделано для обеспечения простой в использовании реализации по умолчанию, все еще требуя, чтобы производный класс обеспечил переопределение.
Назовите обе кнопки отправки одинаковыми
<input name="submit" type="submit" id="submit" value="Save" />
<input name="submit" type="submit" id="process" value="Process" />
Затем в вашем контроллере получите значение submit. Только нажатая кнопка передаст свое значение.
public ActionResult Index(string submit)
{
Response.Write(submit);
return View();
}
Вы, конечно, можете оценить это значение для выполнения различных операций с блоком переключения.
public ActionResult Index(string submit)
{
switch (submit)
{
case "Save":
// Do something
break;
case "Process":
// Do something
break;
default:
throw new Exception();
break;
}
return View();
}
<input name="submit" type="submit" id="submit" value="Save" />
<input name="process" type="submit" id="process" value="Process" />
И в действии вашего контроллера:
public ActionResult SomeAction(string submit)
{
if (!string.IsNullOrEmpty(submit))
{
// Save was pressed
}
else
{
// Process was pressed
}
}
Вы не можете узнать с помощью Request.Form Collection? Если щелкнуть процесс, request.form ["процесс"] не будет пустым