正如有人在评论中指出的那样,Razor 页面不需要控制器,就像您在 MVC 中习惯的那样。我现在 Razor 也没有对按钮单击事件的本机处理。要在用户单击按钮时做某事(在“代码隐藏”中),我们至少有两个选项:
- 使用提交按钮
- 使用 ajax 调用
我找到了很多 MVC 示例,展示了如何定义控制器函数。但如前所述,我没有。
因此,我试图理解这两种方式。这是我的测试cshtml:
<form method="post">
<input type="submit" class="btn btn-primary" value="way1">Way 1/>
</form>
<button id="btn" type="button" class="btn btn-primary" value="way2">Way 2</button>
<script>
$(document).ready(function() {
$("#btn").click(function (e) {
e.preventDefault();
$.ajax({
url: "@Url.Action("Way2")",
type: "POST",
data: "foo",
datatype: "text",
success: function (data) {
alert(data);
}
});
return false;
});
});
</script>
这里是cshtml.cs:
公共类 TestModel : PageModel { private readonly MyContext _context;
public TestModel(MyContext context)
{
_context = context;
}
public IActionResult OnPost()
{
// here I can put something to execute
// when the submit button is clicked
}
public ActionResult Way2(string data)
{
// this is never triggered
}
问题
使用“Way1”(提交)我可以点击按钮,但有一些缺点。默认情况下,由于帖子而重新加载页面。有时我不需要更改任何内容,只需调用 C# 函数即可。但我不明白如何处理多个按钮。即,如果我有 5 个按钮,如何为每个按钮做一些不同的事情?
使用“Way2”我做错了,因为从未达到 cs 代码中的函数并且我收到错误请求错误 (400)。我错过了什么?