我想使用JavaScript / jQuery / Ajax从ASP.NET MVC 3.0中的一个页面重定向到另一个页面。在按钮点击事件中,我编写了如下的JavaScript代码。
function foo(id)
{
$.post('/Branch/Details/' + id);
}
我的控制器代码是这样的:
public ViewResult Details(Guid id)
{
Branch branch = db.Branches.Single(b => b.Id == id);
return View(branch);
}
当我点击一个按钮时,它会在BranchController中调用Details操作,但它不会返回到Details视图。
我没有收到任何错误或异常。它在Firebug中显示状态200 OK。我的代码有什么问题,如何重定向到详细信息视图页面?
答案 0 :(得分:130)
您没有在$ .post AJAX调用中订阅任何成功回调。意味着请求已执行,但您对结果不执行任何操作。如果您想对结果做一些有用的事情,请尝试:
$.post('/Branch/Details/' + id, function(result) {
// Do something with the result like for example inject it into
// some placeholder and update the DOM.
// This obviously assumes that your controller action returns
// a partial view otherwise you will break your markup
});
另一方面,如果你想重定向,你绝对不需要AJAX。仅当您希望保持在同一页面并仅更新其中的一部分时,才使用AJAX。
因此,如果您只想重定向浏览器:
function foo(id) {
window.location.href = '/Branch/Details/' + id;
}
作为旁注: 你永远不应该像这样硬编码网址。在ASP.NET MVC应用程序中处理URL时,应始终使用url帮助程序。所以:
function foo(id) {
var url = '@Url.Action("Details", "Branch", new { id = "__id__" })';
window.location.href = url.replace('__id__', id);
}
答案 1 :(得分:36)
这可以通过在视图中使用隐藏变量然后使用该变量从JavaScript代码发布来完成。
以下是我在视图中的代码
@Html.Hidden("RedirectTo", Url.Action("ActionName", "ControllerName"));
现在您可以在JavaScript文件中将其用作:
var url = $("#RedirectTo").val();
location.href = url;
它对我来说就像一个魅力。我希望它对你也有所帮助。
答案 2 :(得分:9)
您可以使用:
window.location.href = '/Branch/Details/' + id;
但是如果没有成功或错误函数,你的Ajax代码就不完整了。
答案 3 :(得分:4)
// in the HTML code I used some razor
@Html.Hidden("RedirectTo", Url.Action("Action", "Controller"));
// now down in the script I do this
<script type="text/javascript">
var url = $("#RedirectTo").val();
$(document).ready(function () {
$.ajax({
dataType: 'json',
type: 'POST',
url: '/Controller/Action',
success: function (result) {
if (result.UserFriendlyErrMsg === 'Some Message') {
// display a prompt
alert("Message: " + result.UserFriendlyErrMsg);
// redirect us to the new page
location.href = url;
}
$('#friendlyMsg').html(result.UserFriendlyErrMsg);
}
});
</script>
答案 4 :(得分:1)
<script type="text/javascript">
function lnkLogout_Confirm()
{
var bResponse = confirm('Are you sure you want to exit?');
if (bResponse === true) {
////console.log("lnkLogout_Confirm clciked.");
var url = '@Url.Action("Login", "Login")';
window.location.href = url;
}
return bResponse;
}
</script>
答案 5 :(得分:0)
检查下面的代码,这对您有所帮助:
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QWidget* widgetb = new QWidget(this);//this works well
QWidget* widgeta = new QWidget();//this will make focus follow the mouse
QDialog* dialog = new QDialog(this);//this will make focus follow the mouse
}