c# - 为什么四分之三的非常相似的 ajax 调用作为帖子工作,而第四个只作为 get 工作?
问题描述
我有一个 MVC 视图,其中有四个部分(不是部分视图),每个部分都有自己的保存按钮。这些保存按钮不会将整个表单仅将一两个数据字段保存到视图模型的一部分中。它们是别名、默认值、格式和特殊值。在视图中有一个 javascript/jQuery 函数可以为每个保存按钮调用控制器。Alias 的 ajax 代码仅在其及其关联的控制器方法被定义为 GET 时才有效。其他三个作为 POST 工作得非常好。
我已尝试将 SaveAlias 代码配置为 POST 和 Get。在控制器方法中设置断点后,在设置为 POST 时永远不会到达该断点。如果我尝试与其他三个相同的设置作为 POST 的断点正确到达。
// View OnSaveAlias() 中的 javascript 用作 GET // 如果配置为 POST,则不起作用。
function OnSaveAlias() {
$('#AliasClearButton').removeClass("d-none");
$('#AliasClearButton').addClass("d-block");
var name = $('#ActiveEntity_Alias_Alias').val();
$.ajax({
type: 'GET',
datatype: "json",
url: '@Url.Action("SaveAliasG", "Entities")',
data: { Name: name },
contentType: 'application/json',
success: function (message) {
if (message) {
$alert('Error');
} else {
window.location.href = "Create";
}
}
});
};
// GET对应的控制器代码
[HttpGet]
public JsonResult SaveAliasG(String Name)
{
WFViewModel = (WorkflowVM)TempData.Peek("WFViewModel");
WFViewModel.ActiveEntity.Alias.Alias = Name;
WFViewModel.ActiveEntity.AliasesSaved = true;
SelectListItem newItem = new SelectListItem()
{
Text = Name,
Value = "0"
};
WFViewModel.ActiveEntity.EntityAliasList.Add(newItem);
TempData["WFViewModel"] = WFViewModel;
return null;
}
// 默认的 JavaScript 和控制器代码,用作 POST
function OnSaveDefault() {
$('#DefaultsClearButton').removeClass("d-none");
$('#DefaultsClearButton').addClass("d-block");
var name = $('#ActiveEntity_DefVals_DefaultValue').val();
$.ajax({
type: 'POST',
datatype: "json",
url: '@Url.Action("SaveDefaultP", "Entities")',
data: { Name: name },
contentType: 'application/json',
success: function (message) {
if (message) {
$alert('Error');
} else {
window.location.href = "Create";
}
}
});
};
// POST对应的控制器代码
[HttpPost]
public JsonResult SaveDefaultP(String Name)
{
WFViewModel = (WorkflowVM)TempData.Peek("WFViewModel");
WFViewModel.ActiveEntity.DefVals.DefaultValue = Name;
WFViewModel.ActiveEntity.DefaultsSaved = true;
TempData["WFViewModel"] = WFViewModel;
return null;
}
通过 F12 调试器在 javascript 代码中设置断点时,没有可见的错误消息,也没有看到任何错误消息。
解决方案
您是否有正在工作的 POST 和不在同一个控制器中工作的 POST?
@Url.Action("SaveDefaultP", "Entities")'
结果,/Entities/SaveDefaultP
但它不是它试图匹配的方法名称。是路线。如果您的控制器只有一个[HttpPost]
,它将自动路由到该方法。如果您有两种[HttpPost]
方法,那么我认为它只会找到第一种。
尝试将 GET 切换回 POST,但为Route
.
推荐阅读
- c++ - 为什么 std::is_same 对这两种类型给出不同的结果?
- php - Xdebug,不能接受外部 xdebug 连接。局部值覆盖主控
- excel - Vba 错误处理和类 (Excel)
- qt - androiddeployqt 找不到 ant 错误,但可以与 Qt Creator 一起使用
- mysql - 如何在网上商城的mysql中管理refunds db表?
- javascript - javascript中console.log和运算符类型的工作以及javascript中类型转换的示例
- sql - 在同一过程中设置两个行源非常慢 - Access 2010
- jquery - 需要 Jquery 帮助 - 2 点击 2 功能
- c# - C# 8 位置模式与解构模式
- gitlab - gitlab pages : 用于 certbot 挑战的特殊 webroot