C# 单击按钮时使用参数调用方法

C# 单击按钮时使用参数调用方法,c#,razor,asp.net-core,C#,Razor,Asp.net Core,我正在使用ASP.NET Razor模板创建一个web应用程序,我可以使用它启动和停止服务。 我有一个文本框,我可以在其中输入服务和一个开始和停止按钮 <div> <form> Service Name:<br> <input type="text" name="servicename"><br> <button onclick=@Model

我正在使用ASP.NET Razor模板创建一个web应用程序,我可以使用它启动和停止服务。 我有一个文本框,我可以在其中输入服务和一个开始和停止按钮

<div>

        <form>
            Service Name:<br>
            <input type="text" name="servicename"><br>
            <button onclick=@Model.StartService("servicename")>Start</button>   <button onclick=@Model.StopService("servicename")>Start</button>
        </form>
</div>

我可能做错了,但我对这一点很陌生。我想通过建议的web模板(即使用Razor页面)来实现这一点。

这里缺少客户机-服务器的概念。您的
StartService
StopService
方法存在于服务器端,但是
onclick
只意味着客户端的任何内容,特别是用户实际单击将在客户端激活它。您不能像尝试在客户端那样直接调用某些服务器端方法。事实上,这里发生的一切是Razor在呈现视图的过程中实际运行了
StartService
StopService
方法,以便尝试用返回值填充
onclick
属性。因此,最终结果是HTML看起来像
onclick=“Started”
,其中“Started”可能是您的
状态值之一


长话短说,如果在用户单击按钮时需要激活服务器上的某些内容,则必须向服务器提交请求。这可以通过传统的表单post(这将导致页面刷新)或AJAX来完成。在任何一种情况下,您都会使用处理程序发送到路线,然后启动/停止您的服务。

您能给我举个例子说明您所说的可以实现的方法吗@Chris PrattAn使用jQuery的示例:似乎您不需要jQuery,您可以使用基本表单submit:
public  string StopService(string serviceName)
{
    ServiceController[] controller = ServiceController.GetServices(serviceName);
    if (controller == null)
    {
        return null;
    }

    controller[0].Stop();
    controller[0].WaitForStatus(ServiceControllerStatus.Stopped);
    return controller[0].Status.ToString();
}

public  string StartService(string serviceName)
{
    ServiceController[] controller = ServiceController.GetServices(serviceName);
    if (controller == null)
    {
        return null ;
    }

    controller[0].Start();
    controller[0].WaitForStatus(ServiceControllerStatus.Running);
    return controller[0].Status.ToString();
}