【发布时间】:2019-06-26 07:48:31
【问题描述】:
想象一下这是在您的控制器中:
public IActionResult Index(string SomeData = null)
{
return View("Index", SomeData);
}
Index.cshtml 里面是这样的:
@Html.HiddenFor(model => model, new { Id = "SomeData", Name = "SomeData" })
当用户导航到索引时,SomeData 当然会为空。
加载后,用户可以单击执行 ajax 调用的按钮,成功时会弹出引导模式对话框。在模态对话框关闭时,我想刷新页面,但这次使用模态对话框中的一些数据(索引之前没有该数据,首次加载时):
$.ajax({
url: '/Test/Index',
type: 'GET',
data: {
SomeData: 'abcdef'
},
success: function (responseData, status, responseObj) {
console.log(responseData, status, responseObj);
},
async: false
});
这是我注意到的,我的断点甚至没有被命中。曾经。然而,控制台告诉我我的 ajax 调用是成功的。没错,因为我搞砸了抛出异常和更改返回码,而且一切正常——我只是从来没有遇到过断点。
成功后,页面永远不会刷新。就好像什么事都没发生一样。所以需要做些别的事情。
模式对话框关闭后,如何使用新的模型数据更新同一页面?由于我正在使用网格,我需要刷新页面。所以这不仅仅是设置隐藏场并获得快乐的问题。我需要为页面加载设置隐藏字段,以便在 OnDataBound 事件中我知道要做一些我不会做的特定事情。
我的意思是,我可能想多了。从模态对话框返回时,我想我可以这样做(而不是另一个 ajax 调用):
location.href = "/Test/Index?SomeData=abcdef"
一切正常。
谢谢。
【问题讨论】:
-
你的断点到底是在哪里设置的?
-
P.S.顺便说一句,您是否知道 a)
async: false由于糟糕的用户体验而被弃用(浏览器 UI 在请求期间被锁定)并且 b) 您在这里不需要它,因为您正在使用正确处理响应回调。 -
“成功时,页面从不刷新。就好像什么都没发生一样。”...很好。 AJAX 的全部意义在于保持在同一页面上。您是否在控制台中看到成功记录的任何内容?这会告诉你它是否有效。如果您希望发生其他任何事情,则必须编写一些 JavaScript 来实现它。从 AJAX 调用的操作返回视图没有多大意义,因为您不想将整个视图注入另一个视图......返回部分视图或一些 JSON 数据会更有意义.
-
好吧,除非您没有在调试模式或其他模式下运行,否则您应该会看到它被击中。也许你有错误的构建配置集。该端点或对该端点的 AJAX 调用实际上并未被执行。
-
好吧,如果不查看您的环境,很难确定断点问题是什么。但就页面结构而言,我不相信流程是合乎逻辑的……您到底需要 ajax 调用什么?您提到执行 AJAX,然后在 AJAX 成功时弹出一个对话框,但您不需要 AJAX 来显示对话框(除非它将显示在 AJAX 请求期间从服务器获取的额外数据)。另外,这是否指的是与上面显示的不同的 AJAX 调用?因为您显示的内容没有显示对话框。有点混乱……
标签: jquery asp.net-mvc asp.net-core