Solución:
No puedes hacerlo así. No es ASP.NET WebForms
.
Entonces, si desea ejecutar una función C # en el botón, haga clic en Razor, debe podría crear un Controller
, luego, cuando el usuario hace clic en un botón, debe puede llamar a una función de javascript y envía una solicitud ajax a su controlador, luego obtiene los datos (si hay datos) y los muestra.
Actualización: aquí hay una muestra alternativa simple sobre cómo hacer esto:
En su controlador, agregue este método:
public ActionResult GetMessage()
{
string message = "Welcome";
return new JsonResult {Data = message,JsonRequestBehavior = JsonRequestBehavior.AllowGet};
}
Y en su Vista (HTML):
<input type="button" onclick="GetMessage()" value="Get Message"/>
<p></p>
JavaScript:
function GetMessage() {
$.get("/Home/GetMessage", function (data) {
$("p").html(data);
});
}
Y no olvide importar la biblioteca jQuery:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
PD: supongo que el nombre de su controlador es HomeController, debe cambiar la URL si tiene un nombre diferente:
$.get("/{Controller-Name}/{Action-Name}", ...)
Sé que esta es una pregunta antigua, pero este es el primer resultado en Google cuando buscas cómo ejecutar un OnClick
en ASP Razor, y creo que hay una mejor manera de hacerlo que la respuesta actualmente aceptada. No sé si esto es nuevo al momento de escribir la respuesta original, pero creo que es la mejor manera de manejar este comportamiento porque no requiere escritura a mano de los métodos AJAX o JavaScript.
Para aquellos que vienen de Web Forms a ASP Razor, quizás la mejor (y más fácil) forma de recrear ese tipo de comportamiento es usar un método de controlador. Los métodos de controlador se añaden a los métodos Get y Post y se pueden ejecutar mediante formularios generados por ASP Razor.
De forma predeterminada, su página cshtml.cs tendrá una función que se ve así:
public async Task OnPostAsync()
{
<Do Post Stuff Here>
}
A veces, sin embargo, desea hacer algo específico dependiendo de qué causó exactamente la publicación. Aquí es donde puede implementar métodos de controlador.
public async Task OnPostButton()
{
<Do button stuff here>
}
Si luego desea utilizar el método del botón, simplemente cree un Botón ASP que indique su método de manejo.
<form asp-page-handler="button" method="post">
<button class="btn btn-default">Button</button>
</form>
Esto le indicará a las páginas de razor que agreguen una referencia al método del controlador de botones en la cadena de consulta del botón resultante, así.
<form method="post" action="/page?handler=button">
Una visita a eso le dirá a Razor que use el método del controlador con nombre. Siempre que el nombre del controlador coincida con el nombre de la función y el método HTTP, ejecutará la función.
Su código se vería así:
@{
protected void print()
{
@<p>WELCOME!</p>
}
public async Task OnPostPrint()
{
print();
}
}
<form asp-page-handler="Print" method="post">
<button class="btn btn-default">CLICK ME</button>
</form>
No olvide que esto solo llamará al método OnPostPrint. Si necesita ejecutar cosas cada vez que publica, también debe hacerlo en ese método. Probablemente sea mejor dividir esas tareas en una función separada y luego llamarla desde los métodos de publicación. Facilita el mantenimiento.
Para obtener más información sobre los controladores de métodos, incluido cómo agregarles variables, consulte Mikes DotNetting. Hizo un gran trabajo al explicar esto a fondo y creo que aprendí mucho de su artículo.
https://www.mikesdotnetting.com/article/308/razor-pages-understanding-handler-methods