我正在使用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)实现这一目标
答案 0 :(得分:0)
您在这里缺少客户端服务器的概念。您的StartService
和StopService
方法位于服务器端,但是onclick
仅表示客户端的任何内容,尤其是用户激活它的实际点击发生在客户端。您不能像尝试尝试客户端那样直接调用某些服务器端方法。实际上,这里发生的所有事情都是Razor实际上在渲染视图期间运行StartService
和StopService
方法,以便尝试用返回值填充onclick
属性。因此,最终结果是您的HTML看起来像onclick="Started"
,其中“开始”可能是您的Status
值之一。
简短的说来,如果用户需要在单击按钮时激活服务器上的某些内容,则必须向服务器提交请求。这可以通过传统的表单发布(这将导致页面刷新)或通过AJAX来完成。无论哪种情况,您都将使用处理程序发布到路由,该处理程序随后将启动/停止您的服务。