gpt4 book ai didi

javascript - 尝试将错误消息从 Controller 传递到 View 而不重新加载页面(MVC)

转载 作者:行者123 更新时间:2023-12-02 13:56:44 25 4
gpt4 key购买 nike

当我的 Controller 的 ActionResult 失败时,我试图让我的 View 显示错误消息。 (当您按下 View 中的按钮时会触发它。)

但是,无论我尝试什么,ActionResult 总是重定向到不同的页面。如果我尝试返回 View(),它将转到默认的黄色 ASP.Net 错误页面。如果我尝试返回 Content("Error message"),它只会打开一个包含该文本的空白页面。

我已将预设的错误消息保存在 ViewBag.Error 中,但 View 中的 javascript 永远没有机会使用它,因为只要您单击我的按钮,ActionResult 就会将我重定向到某个地方。

如何让 View 保持原状,但在 ActionResult 失败时仍传递消息?

这是我在 Controller 中调用的方法:

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);
}

编辑:这是 View :

... 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 的第二部分是我尝试在 Controller 中命中 If 语句时显示错误消息。

最佳答案

我写这篇文章只是因为它不适合评论。

好的,首先要注意的是,它将开始使用 id 导航到 Action ElectrodeChecklist,然后执行 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);
}
})

关于javascript - 尝试将错误消息从 Controller 传递到 View 而不重新加载页面(MVC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40644523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com