您如何通过 ASP.NET Core / Razor 单击按钮在 Razor 页面上编写 C#?
How do you run C# written on a Razor page from a button click with ASP.NET Core / Razor?
我想在页面上单击按钮时执行我直接在 razor 页面上编写的 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 部分问题是如何阻止它在页面加载时执行,以便它只运行 onclick?我找到了对 Page.IsPostBack)
的引用,但这在客户端似乎无法识别。
似乎在这个时间点,客户端 C# 正在开发中(基于评论),并且完全基于您提供的示例是一个纯 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>
希望对您有所帮助。
这可能有点晚了,但我只是在开发一个使用 ASP.NET Core 和 Razor 页面的网站,这就是我在按钮后面实现 C# 代码所做的工作。我的按钮执行 post 调用函数 OnPostGenerateWebName()
的操作(按钮的处理程序名称是 GenerateWebName
),因此按钮的 post 操作将查找 运行名为 OnPost<handler name>
:
的函数
首先我在网页上创建了一个按钮(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;
}
此函数根据企业名称创建网站名称,并通过设置基础 class 模型元素 Business.BusinessWebName
在表单上显示该网站名称。为了让它显示在表单上,我必须调用 ModelState.Clear()
。
希望这对你以后有所帮助。
我想在页面上单击按钮时执行我直接在 razor 页面上编写的 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 部分问题是如何阻止它在页面加载时执行,以便它只运行 onclick?我找到了对 Page.IsPostBack)
的引用,但这在客户端似乎无法识别。
似乎在这个时间点,客户端 C# 正在开发中(基于评论),并且完全基于您提供的示例是一个纯 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>
希望对您有所帮助。
这可能有点晚了,但我只是在开发一个使用 ASP.NET Core 和 Razor 页面的网站,这就是我在按钮后面实现 C# 代码所做的工作。我的按钮执行 post 调用函数 OnPostGenerateWebName()
的操作(按钮的处理程序名称是 GenerateWebName
),因此按钮的 post 操作将查找 运行名为 OnPost<handler name>
:
首先我在网页上创建了一个按钮(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;
}
此函数根据企业名称创建网站名称,并通过设置基础 class 模型元素 Business.BusinessWebName
在表单上显示该网站名称。为了让它显示在表单上,我必须调用 ModelState.Clear()
。
希望这对你以后有所帮助。