我已经在MVC中创建了一个应用程序,该应用程序已集成到已经存在的Web应用程序中(相对性)。在特定的情况下,我想为某些条目更新SQL表。我用下面的代码创建了一个包含sql字符串和相同执行的类操作方法。
MyModel.cs
public class Reports
{
public static int Update()
{
Relativity.API.IDBContext eddsDBContext = Relativity.CustomPages.ConnectionHelper.Helper().GetDBContext(-1);
int workspaceArtifactID = Relativity.CustomPages.ConnectionHelper.Helper().GetActiveCaseID();
String sql = "UPDATE [EDDS" + workspaceArtifactID + "].[EDDSDBO].[Reports_Admin] SET BeenRun = 'Yes', ReportDate = getdate() where Report_Type = 'Claim_Incomplete' AND (BeenRun <> 'Yes' or BeenRun is null)";
eddsDBContext.BeginTransaction();
try
{
eddsDBContext.ExecuteNonQuerySQLStatement(sql);
eddsDBContext.CommitTransaction();
}
catch (Exception ex)
{
eddsDBContext.RollbackTransaction();
throw;
}
return 0;
}
}
我希望在单击按钮以更新表时在我的视图中执行此方法。我知道在视图中调用类操作方法是一种不好的做法,但是在这种情况下,我找不到任何其他解决方案。我的视图的代码如下:
Reports.cshtml
<body>
<button class="button5" onclick="fnUpdateReport();" style="margin-left:100px;">Update</button>
</body>
<script>
function fnUpdateReport() {
if (SelectedValue == "A") {
@Reports.Update();
}
}
</script>
[方法调用与下拉值绑定,并且单击按钮时应在方法中执行更新命令。
问题
现在,在加载视图时执行类方法(更新),而不是在单击按钮时执行。单击按钮时,它不起作用,这是此应用程序的绝对要求。
如果有人可以帮助我解决如何使该方法响应按钮单击,那将是非常有用的。另外,如果有人通过其他方法肯定会在单击按钮时调用该方法,请告诉我。
让我知道您是否还需要更多详细信息来帮助我解决这一问题。预先感谢!
您的“ @ Reports.Update();”在页面渲染期间执行。它是服务器端代码。不是客户端。
[如果要从javascript调用服务器端,则需要进行AJAX请求。可以找到一个示例here。
您必须先了解MVC的工作方式。用这种方法,您只需将服务器方法放入脚本,该脚本将在运行时在浏览器上执行,并且浏览器不允许直接运行服务器端方法。
您必须将请求发送到服务器,例如脚本然后是ajax请求,或直接调用部分视图。
请创建一个Action方法,然后从视图中创建一个Ajax调用。这是正确的方法。