通过HTML按钮调用C#函数
我想做的是通过按钮调用函数 我将给您留下一个简单的代码,它不起作用:通过HTML按钮调用C#函数,c#,html,asp.net,razor,C#,Html,Asp.net,Razor,我想做的是通过按钮调用函数 我将给您留下一个简单的代码,它不起作用: @{ protected void print() { @<p>WELCOME!</p> } } <form> <button onclick="print" value="CLICK ME"/> </form> @{ 受保护的无效打印() { @ 欢迎光临 } } 关于如何完成我试图在上面的代码中所做的事
@{
protected void print()
{
@<p>WELCOME!</p>
}
}
<form>
<button onclick="print" value="CLICK ME"/>
</form>
@{
受保护的无效打印()
{
@ 欢迎光临
}
}
关于如何完成我试图在上面的代码中所做的事情,你有什么想法吗
注意:我没有使用MVC你不能这样做。它不是
ASP.NET WebForms
因此,如果您想在Razor中的按钮点击上执行C#函数,您必须创建一个控制器
,然后当用户点击一个按钮时,您必须调用一个javascript函数,它向您的控制器发送一个ajax请求,然后获取数据(如果有数据)并显示它
更新:下面是一个关于如何执行此操作的简单示例:
在控制器中添加以下方法:
public ActionResult GetMessage()
{
string message = "Welcome";
return new JsonResult {Data = message,JsonRequestBehavior = JsonRequestBehavior.AllowGet};
}
在您的视图中(HTML):
别忘了导入jQuery库:
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
@{
字符串MyFunction()
{
返回“你好,剃刀”;
}
}
@节脚本
{
document.addEventListener(“DOMContentLoaded”,函数(){
var button=document.getElementById('button');
按钮。addEventListener('click',函数(){
var test=“@MyFunction()”;
控制台日志(测试);
});
});
}
我知道这是一个老问题,但当你在ASP Razor中查找如何运行OnClick
方法时,这是谷歌上的第一个结果,我认为有一个比目前公认的答案更好的方法。我不知道在编写原始答案时这是否是新的,但我确实认为这是处理这种行为的最佳方式,因为它不需要手工编写AJAX或JavaScript方法
对于那些从Web表单进入ASP Razor的用户,也许重新创建这种行为的最好(也是最简单)方法是使用处理程序方法。处理程序方法附加到Get和Post方法,可以使用ASP Razor生成的表单运行
默认情况下,您的cshtml.cs页面将具有如下功能:
public async Task OnPostAsync()
{
<Do Post Stuff Here>
}
@{
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>
公共异步任务OnPostAsync()
{
}
不过有时候,你想做一些具体的事情,这取决于到底是什么导致了这篇文章。这是您可以实现处理程序方法的地方
public async Task OnPostButton()
{
<Do button stuff here>
}
公共异步任务OnPostButton()
{
}
如果您想使用button方法,只需创建一个指示其处理程序方法的ASP按钮
<form asp-page-handler="button" method="post">
<button class="btn btn-default">Button</button>
</form>
按钮
这将告诉razor pages在结果按钮的querystring中添加对按钮处理程序方法的引用,如下所示
<form method="post" action="/page?handler=button">
对它的访问将告诉Razor使用命名处理程序方法。只要处理程序的名称与函数和HTTP方法的名称匹配,它就会运行函数
您的代码如下所示:
public async Task OnPostAsync()
{
<Do Post Stuff Here>
}
@{
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>
@{
受保护的无效打印()
{
@ 欢迎光临
}
公共异步任务OnPostPrint()
{
打印();
}
}
点击我
别忘了,这将只调用OnPostPrint方法。如果你每次发帖时都需要运行东西,那么它也需要采用这种方法。最好将这些任务分解成一个单独的函数,然后从post方法中调用它。使其更易于维护
有关方法处理程序的更多信息,包括如何向其添加变量,请查看Mikes DotNetting!他对这一点做了很好的解释,我觉得我从他的文章中学到了很多
不,你不能那样做。这就是JavaScript的用途。如果你是这样的话,它是不会工作的
onclick
用于调用JavaScript函数。进行编辑以防止产生MVC和Razor(语法)需要MVC模式的假设。您可以使用Razor语法,只需对其他页面执行标准HTTP POST,和/或相同的操作(模仿“回发”,在回发中您可以“处理”发布的数据-比“web表单”更“裸机”,但核心概念相同)…Hth.I很抱歉,我太笨了,但我该如何在asp.net网站中制作控制器(没有MVC)?谢谢分享。即使是略读这篇文章,我也可以看出,当我疲惫不堪而无法编写实际代码时,在抛开想法时,我大致上是如何勾勒出我的UI的。对于那些主要习惯于桌面开发的人来说,使用handler方法是一种更直观的方法,这似乎适合作为WebForms的精神继承者
<form method="post" action="/page?handler=button">
@{
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>