Yec*_*ats 3 c# razor asp.net-core razor-pages
我想在单击页面上的按钮时执行我直接在 razor 页面上编写的 C# 方法。我发现,如果我引用了页面上的按钮,它会在第一次加载时执行该方法,但当我实际单击该按钮时,它不会再次执行。这是代码:
Razor 页面 C# 参考:
@functions
{
int productIndex = 0;
int AddProduct()
{
productIndex = productIndex + 1;
return productIndex;
}
}
Run Code Online (Sandbox Code Playgroud)
按钮参考:
<button type="button" class="btn btn-success" onclick="@AddProduct()" value="New Product" />
Run Code Online (Sandbox Code Playgroud)
我也尝试过这个参考并得到相同的结果:
<input class="btn btn-success" onclick="@AddProduct()" value="New Product"/>
Run Code Online (Sandbox Code Playgroud)
我的第二部分问题是如何阻止它在页面加载时执行,以便它只在单击时运行?我找到了参考文献,Page.IsPostBack)但这似乎在客户端上未被识别。
小智 8
这就是我在按钮后面实现 C# 代码所做的事情。
我的按钮执行调用函数的后操作OnPostGenerateWebName()(按钮的处理程序名称为GenerateWebName),因此按钮的后操作将查找并运行名为 的函数OnPost<handler name>:
首先我在网页(BusinessDetails.cshmtl文件)上创建了一个按钮:
<button type="submit" asp-page-handler="GenerateWebName" class="btn btn-outline-info"
id="btnGenerateWebName">Generate Business Web Name</button>
Run Code Online (Sandbox Code Playgroud)
OnPostGenerateWebName接下来,我用 C#创建处理程序(在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;
}
}
Run Code Online (Sandbox Code Playgroud)
此函数根据企业名称创建 Web 名称,并通过设置基础类模型元素在表单上显示 Web 名称Business.BusinessWebName。为了使其显示在表单上,我必须调用ModelState.Clear().
| 归档时间: |
|
| 查看次数: |
16363 次 |
| 最近记录: |