尽管付出了很多努力,但我无法在我的CSHTML代码中调用函数。这样的建筑是否大致可以起作用?
***Function***
@functions {
public void deleteRecord(int id, Database db)
{
db.Execute("DROP INDEX "+id+"ON Students");
}
}
***Button calling that function***
<td><button onclick="@deleteRecord(row.No, db)">Delete</button></td>
db声明早期的SQL数据库
答案 0 :(得分:1)
这是非常非常糟糕的做法。首先,您要打破严格的MVC规则 - 数据模型,呈现数据的视图和控制器,以确保模型和视图层之间的交互。
其次,您正尝试通过原始SQL查询来查询数据库。它没有第一个问题那么糟糕,但您是否考虑使用ORM,如Entity Framework或NHibernate。
在您的情况下,我建议您使用JavaScript和C#来达到目标。
看起来或多或少会像这样:
档案view.cshtml
<td><button id="deleteButton">Delete</button></td>
档案script.js
$("#deleteButton").click(function() {
$.get("/SomePage/Delete/12")
.done(function(obj) {
// display result or whatever you want
});
})
档案SomePageController.cs
public ActionResult Delete(int id)
{
// delete object from database
}
答案 1 :(得分:0)
这样的建筑是否可以大致工作?
如果是,那真的不应该。这是一种非常糟糕(难以调试/支持)的混合问题。
您的服务器端代码应位于服务器端对象中,而不是客户端视图中。如果这是MVC,那么该方法可能属于模型。如果这是WebForms,那么该方法可能仍属于模型或可能属于代码隐藏。
不要在您的视图中放置方法。你可能无论如何,因为一个视图不是一个类,方法需要在类中。但即使你发现有一些黑客允许你这样做,也不要。
修改:我还注意到您正在尝试从客户端操作调用此方法。即使你得到编译,这也不会工作。客户端代码不能直接调用服务器端代码中的方法,反之亦然。可以将Web应用程序视为实际上是两个应用程序,一个在服务器上运行,另一个在浏览器中运行。他们可以互相沟通,但他们在完全不同的计算机上的不同平台上运行不同的语言,他们无法看到彼此的代码。