单击按钮时带参数的调用方法

时间:2018-08-23 15:13:25

标签: c# razor asp.net-core

我正在使用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>

我有一个模型,该模型具有stop和Start服务方法,该服务方法将服务名称作为参数。 运行我的应用程序会自动调用StartService和StopService。我希望仅在单击按钮时才调用它们

这是我的模特

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();
}

我可能做错了一切,但是我对此很陌生。我想通过建议的Web模板(即使用Razor Page)实现这一目标

1 个答案:

答案 0 :(得分:0)

您在这里缺少客户端服务器的概念。您的StartServiceStopService方法位于服务器端,但是onclick仅表示客户端的任何内容,尤其是用户激活它的实际点击发生在客户端。您不能像尝试尝试客户端那样直接调用某些服务器端方法。实际上,这里发生的所有事情都是Razor实际上在渲染视图期间运行StartServiceStopService方法,以便尝试用返回值填充onclick属性。因此,最终结果是您的HTML看起来像onclick="Started",其中“开始”可能是您的Status值之一。

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