【问题标题】:How do you run C# written on a Razor page from a button click with ASP.NET Core / Razor?如何使用 ASP.NET Core / Razor 通过单击按钮运行在 Razor 页面上编写的 C#?
【发布时间】:2019-04-03 17:44:03
【问题描述】:

我想在页面上单击按钮时执行我直接在剃须刀页面上编写的 C# 方法。我发现如果我有对页面上按钮的引用,它会在第一次加载时执行该方法,但在我实际单击按钮时不再执行。代码如下:

Razor 页面 C# 参考:

@functions
{
    int productIndex = 0;

    int AddProduct()
    {
        productIndex = productIndex + 1;
        return productIndex;
    }
}

按钮参考:

 <button type="button" class="btn btn-success" onclick="@AddProduct()" value="New Product" />

我也试过这个参考并得到相同的结果:

<input class="btn btn-success" onclick="@AddProduct()" value="New Product"/>

我的第 2 部分问题是如何阻止它在页面加载时执行,使其仅在单击时运行?我找到了对Page.IsPostBack) 的引用,但这似乎在客户端无法识别。

【问题讨论】:

标签: c# asp.net-core razor razor-pages


【解决方案1】:

这可能有点晚了,但我只是在使用 ASP.NET Core 和 Razor 页面开发一个网站,这就是我在按钮后面实现 C# 代码所做的工作。我的按钮执行调用函数OnPostGenerateWebName()(按钮的处理程序名称为GenerateWebName)的post 操作,因此按钮的post 操作将查找并运行名为OnPost&lt;handler name&gt; 的函数:

首先我在网页上创建了一个按钮(BusinessDetails.cshmtl 文件):

<button type="submit" asp-page-handler="GenerateWebName" class="btn btn-outline-info" 
id="btnGenerateWebName">Generate Business Web Name</button>

接下来我在 C# 中创建处理程序 OnPostGenerateWebName(在 BusinessDetails.cshtml.cs 文件中),它调用另一个 C# 函数 CreateWebName()

  public async Task<IActionResult> OnPostGenerateWebName(string returnUrl = null)
    {
        CreateWebName();

        // all  done
        return Page();
    }


    private void CreateWebName()
    {
        //generate a web name for this business
        if (Business.BusinessName.Length > 0)
        {
            var WebName = Business.BusinessName;
            // remove all special characters, only keep 0-9,a-z,A-Z
            WebName = Regex.Replace(Business.BusinessName, "[^0-9a-zA-Z]+", "");
            // set the new web name
            ModelState.Clear();
            Business.BusinessWebName = WebName;

        }

此函数通过设置基础类模型元素Business.BusinessWebName,根据企业名称创建一个网络名称并在表单上显示该网络名称。为了让它显示在表格上,我不得不打电话给ModelState.Clear()

希望这对您将来有所帮助。

【讨论】:

  • 我还必须在我的 .cshtml 文件中添加以下行: form asp-route-returnUrl="@Model.ReturnUrl" method="post"> 这可以通过以下方式执行 post 函数表单按钮。
【解决方案2】:

似乎此时,客户端 C# 正在开发中(基于 cmets),并且仅基于您提供的示例,这是一个纯 Javascript 解决方案.

HTML

<div>
    <button type="button" onclick="AddProduct()">New Product</button>

    <p id="ShowResult1">

    </p>
</div>

jQuery/Javascript

<script>
    var count = 0;

    function AddProduct() {

        count++;

        $("#ShowResult1").text(count);
    }
</script>

我希望这会有所帮助。

【讨论】:

  • 如果 OP 出于类型安全等原因不喜欢维护 JavaScript,Typescript 也是一种选择,尽管无论如何都会编译成 JavaScript。
猜你喜欢
  • 2018-05-07
  • 2020-12-10
  • 1970-01-01
  • 2020-08-14
  • 1970-01-01
  • 2020-06-03
  • 2019-08-06
  • 2021-05-06
  • 2021-01-08
相关资源
最近更新 更多