【问题标题】:Call a C# function using HTML onclick button使用 HTML onclick 按钮调用 C# 函数
【发布时间】:2019-11-06 21:20:09
【问题描述】:

我正在使用 asp.net(C#)。我创建了一个剃须刀页面,并希望使用 html 按钮单击在 C# 中调用一个函数。该函数执行类似于稳定婚姻问题的匹配算法。例如,当管理员单击按钮“Button1”时,必须调用 C# 中的函数 matching(),该函数应执行函数内的语句并最终返回匹配的列表。我在表格中看到了一些通用答案,但我需要更具体的答案。提前致谢

如前所述,这是一种匹配算法 - 执行具有单边偏好的双边匹配。 我已经尝试过 html "Button1_Click" 解决方案。 这是非常通用的,不适合我的代码。

这是我到目前为止所做的:

html代码:

<form id="form1" runat="server">
    <button type="submit" id="cmdAction" text="Button1" runat="server">
        Button1
    </button>
</form>

  

C#代码:

public ActionResult OnGet()
{
if (NTUser.Role != Role.Admin)
{return RedirectToPage("/Denied");}
matching();
return RedirectToPage();
}    
public void matching()
{//body}

我在 html 端使用的按钮是“匹配并显示结果”

我希望输出是一个类似 Excel 表格的列表,如果需要,可以编辑/删除。

编辑: 如果有人知道如何使用枚举和/或布尔值,我也将不胜感激

【问题讨论】:

  • 对我来说,您的代码看起来不错。有什么例外吗?
  • 您是使用razor 语法还是纯html 来调用Action 上的Controller?在这里更新View 的代码会更有帮助
  • 在我看来,您将 Web 表单 (runat="server") 与 Razor 页面混淆了。它们是两个不同且不兼容的框架。如果您正在使用 Razor Pages 并想确定单击了哪个按钮,请使用命名处理程序:learnrazorpages.com/razor-pages/…
  • 我不想找出点击了哪个按钮。当在客户端单击按钮时,我想在服务器端调用 C# 函数。

标签: c# html razor-pages buttonclick


【解决方案1】:

您可以调用一个方法来检查角色并重定向另一个操作,或者只调用私有方法。

public ActionResult OnGet()
{
     if (NTUser.Role != Role.Admin)
     {
        return RedirectToPage("/Denied");
     }
     else
     {
        return RedirectToAction(Matching);
     }
      ...other if with return
}

public ActionResult Matching()
{
   //dosomething
}

查看

如果您需要发布,请使用它

@using (Html.BeginForm("OnGet", "YourControllerName", FormMethod.Post))
{
    <button type="submit" id="cmdAction" runat="server">
        Match and Show the result
    </button>
}

如果你需要就得到

@Html.ActionLink("Match and Show the result", "OnGet", "YourControllerName") //without params

不要忘记添加属性[HttpPost] 或[HttpGet](获取更好的可读性代码)

【讨论】:

  • 这是在 C# 端。但是怎么连接到html端的按钮呢?
  • 另外,我已经编辑了我的问题。因此,如果您对此有任何建议,我们非常欢迎
【解决方案2】:

试试这个:

<a href="@Url.Action("OnGet", "ControllerName"> Display Text</a>

【讨论】:

    【解决方案3】:

    有很多方法可以做到这一点,因为你提到了剃须刀页面,所以我建议你通过这个guide

    只需像这样使用 razor 语法

    @using (Html.BeginForm("ActionName", "ControllerName", FormMethod.Post)) { 
       <input type="submit" value="Match" />
    }
    

    【讨论】:

      【解决方案4】:

      无论您尝试做什么都可以使用 ajax 来完成,因为简单的 button_Click 将无法使用 razor 和 MVC。所以进行 ajax 调用,在此之上我会建议您使用更容易的 Ajax.BeginForm。

      https://www.c-sharpcorner.com/UploadFile/0c1bb2/ajax-beginform-in-Asp-Net-mvc-5/

      看看他的文章。Ajax beginform 基本上允许您在 ajax 响应返回时访问成功方法,因此您可以在 OnSuccess 方法中访问从控制器返回的结果。

      【讨论】:

      • 能不能说的详细点?
      猜你喜欢
      • 2010-10-19
      • 1970-01-01
      • 2015-05-14
      • 2021-11-30
      • 2015-04-27
      • 1970-01-01
      • 2021-06-21
      • 1970-01-01
      相关资源
      最近更新 更多