我有一个简单的示例视图,其中包含两个(略有不同的)链接,一个带有内联确认,另一个带有JQuery来显示对话框。它们应该最终都在同一个地方,它们似乎都能正确地击中控制器事件。内联动作工作得很好,我们在积极响应中重定向到结果页面。 jQuery / JavaScipt事件也会命中控制器,我甚至将其追踪到结果页面的渲染中,但实际上没有任何内容呈现给屏幕。
现在,我唯一有点奇怪的是将url存储到Result Action的隐藏字段,但是像这样存储似乎是正确的做法,以避免URL出现问题JavaScript不正确地读取。
Dialog.cshtml:
@using System.Globalization
@{
ViewBag.Title = "Dialog";
}
<link href="~/Content/bootstrap-theme.css" rel="stylesheet" />
<link href="~/Content/bootstrap.css" rel="stylesheet" />
<link href="~/Content/themes/base/jquery-ui.css" rel="stylesheet" />
<script src="~/Scripts/jquery-2.1.0.js"></script>
<script src="~/Scripts/jquery-ui-1.10.4.js"></script>
<script src="~/Scripts/bootstrap.js"></script>
<h2>Dialog</h2>
<p><a href='@Url.Action("Result")' onclick="return confirm('Are you really sure?');">Click Me</a></p>
<button type="button" id="TestLink">Show JQuery Dialog</button>
<input type="hidden" id="RouteUrl" value='@Url.Action("Result")' />
<div id="dialog" title="jQuery UI in ASP.NET MVC">
<p>You now have the power of ASP.NET, the simplicity of client-side scripting with jQuery, and the looks of jQuery UI. Congrats, web slinger!</p>
</div>
<script type="text/javascript">
// This code runs on page load
$(function () {
// Attach a 'dialog' action to the dialog div above
$('#dialog').dialog({
autoOpen: false,
modal: true,
width: 450,
buttons: {
"Ok": function () {
$(this).dialog("close");
var url = $("#RouteUrl").attr("value");
$.get(url);
return true;
},
"Cancel": function () {
$(this).dialog("close");
return false;
}
}
});
// Show the dialog when the show-dialog click event fires
$("#TestLink").button().click(function (e) {
$('#dialog').dialog('open');
e.preventDefault();
});
});
</script>
和控制器
using System.Web.Mvc;
namespace MVCWorkbench.Controllers
{
public class JavaScriptController : Controller
{
public ActionResult Dialog()
{
return View();
}
public ActionResult Result()
{
return View();
}
}
}
答案 0 :(得分:0)
我不确定我是否理解正确。您是否尝试在单击对话框中的“确定”按钮时浏览到该URL,或者您是否尝试从Dialog ActionResult加载数据并将其放在对话框中?
根据您的代码,在对话框中按“确定”后,您似乎正在尝试浏览页面。如果是这样,而不是使用
$.get(url);
使用:
window.location.href(url);
jQuery正在从服务器检索数据,但您目前没有对它进行任何操作。