【问题标题】:Call Method with argument when button Clicked单击按钮时调用带参数的方法
【发布时间】:2018-08-23 15:13:24
【问题描述】:

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

我有一个模型,它具有将服务名称作为参数的停止和启动服务方法。 运行我的应用程序会自动调用 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)

【问题讨论】:

标签: c# razor asp.net-core


【解决方案1】:

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

总之,如果你需要在用户点击按钮时激活服务器上的某些东西,你必须向服务器提交请求。这可以通过传统的表单发布(这将导致页面刷新)或通过 AJAX 来完成。在任何一种情况下,您都将发布到带有处理程序的路由,然后该处理程序将启动/停止您的服务。

【讨论】:

  • 你能给我看一个你所说的如何实现的例子吗? @克里斯普拉特
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-06
相关资源
最近更新 更多