我有一个方法如下:
public static void UpdateAll()
{
// Updates database
}
我有一个MVC应用程序,视图如下(为清晰起见删除了行):
<button id ="btn">Update</button>
//...
<script>
$('#btn').click(function () {
@{
project.models.settings.UpdateAll();
}
});
</script>
project.models.settings.UpdateAll()方法会在页面加载后立即触发。有没有办法让这个方法加载,只有在用户点击按钮后?
为了测试,我确实用一个简单的console.log替换了该方法,并按预期工作。
任何指针,例子都非常感谢。
亲切的问候
答案 0 :(得分:1)
我认为您缺少对Web应用程序如何工作的基本理解。
当您将以下内容放入视图时,您将声明在服务器端处理视图时将执行的一大块服务器端代码。
@{
project.models.settings.UpdateAll();
}
当你用console.log替换它时它起作用的原因是console.log
是客户端代码并且它在客户端(即在浏览器中)执行。
从客户端代码(您的按钮单击事件处理程序)调用服务器端代码(您的UpdateAll方法)的唯一方法是进行AJAX调用。
最简单的方法是首先将UpdateAll
方法公开为控制器操作。通常,对于响应AJAX调用的操作,我想创建一个单独的控制器,但这并非绝对必要。
public ServiceController : Controller
{
public ActionResult UpdateAll()
{
}
}
现在,从客户端代码对该操作进行AJAX调用。
答案 1 :(得分:0)
你做的方式不起作用。
当视图加载时,将调用该方法,因为它是服务器端代码,并且将在视图渲染时执行。
所以使用ajax调用一个动作,并在该动作中调用此方法:
$('#btn').click(function () {
$.ajax({
type: "GET",
url: '@Url.Action("MyAction","My")',
success: function(data) {
},
error: function(result) {
alert("Error");
}
});
});
在控制器中写一个动作:
public void MyAction()
{
project.models.settings.UpdateAll();
}