我正在尝试让我的View在我的控制器的ActionResult失败时显示错误消息。 (当您按下视图中的按钮时会触发它。)
然而,无论我尝试什么,ActionResult总是重定向到不同的页面。如果我尝试返回View(),它将转到默认的黄色ASP.Net错误页面。如果我尝试返回内容(“错误消息”),它只会打开一个包含该文本的空白页面。
我已经在ViewBag.Error中保存了我的预设错误消息,但我的View中的javascript永远不会有机会使用它,因为只要您单击我的按钮,ActionResult会将我重定向到某个地方。
如何让我的View保持不变,但如果ActionResult失败,仍会传递消息?
这是我在控制器中调用的方法:
public ActionResult ElectrodeChecklist(int id)
{
var routeChecklist = _routeService.GetRouteChecklist(id);
// This is where I'm trying to catch this error.
if (routeChecklist.Count == 0)
{
ViewBag.Error = "This route has no checklist steps to print.";
return ???
}
...
blah blah stuff to download a PDF file when everything works
...
return new BinaryContentResult(buffer, "application/pdf", filename);
}
编辑:这是视图:
... dropdown menu called #dd-route...
<a href="#" id="btn-print" class="btn btn-success btn-sm">Generate PDF</a>
<script type="text/javascript">
$(function () {
$('#dd-route').change(function () {
var $route = $(this).val();
var $url = '@Url.Action("electrodechecklist", "wip")?id=' + $route;
$('#btn-print').attr('href', $url);
});
$('#btn-print').click(function () {
var $error = ViewBag.Error;
if ($error != "") {
$('#alertbar').show();
$('#alert').html($error);
}
})
});
</script>
当用户在下拉菜单中选择一个项目时,调用我的ActionResult的URL将被输入到按钮的href属性中。然后,当他们点击按钮时,会使用下拉列表中的正确值将其触发。
JavaScript的第二部分是我尝试在控制器中点击If语句时显示错误消息。
答案 0 :(得分:2)
我之所以写这篇文章是因为它不适合评论。
好的首先要注意的是,它将开始使用ElectrodeChecklist
导航到动作id
,然后执行BinaryContentResult
所做的事情。我看不出var $error = ViewBag.Error;
可能如何工作,但我又不知道BinaryContentResult
是如何做什么的。
如果您希望用户看到ViewBag.Error
,则需要修改此部分
if (routeChecklist.Count == 0)
{
TempData["Error"] = "This route has no checklist steps to print.";
return RedirectToAction("ACTION", "CONTROLLER");
}
由@StephenMuecke建议。这里的ACTION是用户首先使用的页面。您可以将它们重定向到任何错误页面,然后仍然可以访问TempData["Error"]
。如果这仍然没有做你想要的,请告诉我们。
//What you are trying to do here is awesome
//but I'm not sure if it's even possible as you are moving away from the page when the user clicks the button/link
//I'd like other please comment on this. I could use it too
$('#btn-print').click(function () {
var $error = ViewBag.Error;
if ($error != "") {
$('#alertbar').show();
$('#alert').html($error);
}
})
答案 1 :(得分:0)
检查以下代码,如果没有刷新,您可以在页面上显示错误消息:
$('#dd-route').change(function () {
var TestModel = {
"id": $("route").val()
}
$.ajax({
url: '/wip/electrodechecklist',
type: "Post",
async: false,
data: JSON.stringify(TestModel),
dataType: "html",
contentType: "application/json;charset=utf-8",
success: function (result) {
var $error = ViewBag.Error;
if ($error != "") {
$('#alertbar').show();
$('#alert').html($error);
}
}
});
});
&#13;
希望这会对你有所帮助!!