Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过HTML按钮调用C#函数_C#_Html_Asp.net_Razor - Fatal编程技术网

通过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>