我的 View 中有以下代码:
<script type="text/javascript">
function OnCancelClick(e)
{
var jobId = e;
var flag = confirm('You are about to cancel job : ' + jobId + '. Are you sure you want to cancel this job?');
if (flag) {
$.ajax({
url: '/job/CancelJob',
type: 'POST',
data: { jobId: jobId },
dataType: 'html',
success: function (result) { alert('Job ' + jobId + ' was cancelled.'); document.location = "@Url.Action("Index", "Job")"; },
error: function () { alert('Something went wrong. Check the log for more information.'); }
});
}
return false;
}
</script>
在我看来我还有:
<input type="submit" id="cancelButton" value="Cancel" onclick="javascript: return OnCancelClick(@Model.Id);" />
在我的 Controller 中我有:
[HttpPost]
public ActionResult CancelJob(int jobId)
{
try
{
logger.LogInfo(string.Format("<start> Cancel-button clicked for job : {0}", jobId), jobId);
JobCommandService.ChangeStatus(jobId, 6);
logger.LogInfo(string.Format("<end> Cancel-button clicked for job : {0}", jobId), jobId);
return RedirectToAction("Index", "Job");
}
catch (Exception ex)
{
logger.LogError(ex.Message, ex, jobId);
Response.StatusCode = (int)HttpStatusCode.InternalServerError;
return Json(new { Success = false, Message = ex.Message });
}
}
当我在我的 VS2012 中运行它时,它工作得很好。 当我将它部署到服务器时,我收到了出错的消息。 在我的日志记录中,没有点击按钮的痕迹。
最佳答案
根据您的评论,部署后您的应用会安装在 accindigoapps.blabla.lok/jobmonitor
中。
但是您的脚本将 url 硬编码为 url: '/job/CancelJob'
。这意味着:
- 当您从 VS 进行调试时,您的脚本将工作,因为请求被发送到类似
http://localhost:XXX/job/CancelJob
的 url
- 但是在生产中,请求将被发送到
http://accindigoapps.blabla.lok/job/CancelJob
,缺少 jobmonitor 部分。
您需要一种方法来通知您的 JS 代码有关您的应用程序的基本 url:
您可以使用
<Url.Action("CancelJob","job")
在 Razor View 中生成 Url,并将该 Url 传递到您的 javascript 代码中。另一种选择是在基本布局的某些 javascript 中使用
Url.Content("~/")
。该帮助程序Url.Content("~/")
将仅返回您的应用程序文件夹,在您的开发环境中为/
,在部署时为/jobmonitor/
.这样一来,您的应用程序根目录相对 url 可用于任何脚本,因此您可以像在脚本中那样使用它来构建根目录相对 url:<script> var myApp = {}; myApp.BaseUrl = '@Url.Content("~/")'; </script> //Some other script like yours would be able to keep using root-relative urls as: $.ajax({ url: myApp.BaseUrl + 'job/CancelJob', ...
如果您更喜欢生成完整的 url,您可以采用类似的方法。看看this question
希望对您有所帮助!
关于c# - JavaScript 未在 C# MVC4 中触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21596803/