我想处理我的ASP.NET MVC 4项目中的一些错误。早些时候我在开发WebForms应用程序,并使用了Page.ClientScript.RegisterClientScriptBlock
,但是MVC!= WebForms及其服务器控件,回发等...所以我有些困惑。
当然,我可以使用return Json(...)
这样的smth从Controller返回JSON响应,但是请稍候。
我有一个观点。它具有确切的标记。我的View如何识别我必须从jQuery +引导代码中调用的模式框?
首先,我想使用GET参数来处理查询字符串。
如果/Index/UserNotExist->比用显示自定义模态框调用jQuery函数
否则,如果调用URL-> Than,则调用jQuery函数以显示相同的模式框,但其中包含其他文本。
我尝试使用一些代码来处理当前位置,但是失败了(很奇怪,某些jQuery脚本的脚本块结尾处运行良好,但确切地说该脚本甚至没有触发)。
然后,我想到了cookie,将临时数据写入cookie并进行简单检查。
但是在WebForms中,这样的 checkin 代码if (Request.Cookies["error"] != null
运行良好,MVC甚至不接受这样的检查,它总是会产生异常。
我有点累,想听听您的建议。
我究竟做错了什么?
谢谢
最佳答案
当我不使用ajax消耗 Controller 的操作时,将错误从服务器带到客户端的方法是使用TempData。
我通常会在其中放置一个基本 Controller ,再加上其他所有 Controller 通用的管道。
所以这个方法
protected void AddError(string message, string header = null)
{
TempData[Constants.ErrorKey] = new ViewMessage
{
Type = eMessageType.Error,
Header = header,
Content = message
};
}
将错误消息添加到TempData。
在我的_Layout.cshtml中,我使用 bootstrap 的警报来显示错误:
@if (TempData[Constants.ErrorKey] != null)
{
var error = TempData[Constants.ErrorKey] as ViewMessage;
<div class="alert alert-block alert-error fade in">
<a class="close" data-dismiss="alert" href="#">×</a>
<br />
<h4 class="alert-heading">@error.Header:</h4>
<p>@error.Content</p>
<br />
</div>
<br />
}
因此,任何时候在任何 Controller 中调用 Action 都会产生业务逻辑错误,就会出现带有错误内容的警报。
实际上,您可以结合使用 Action 过滤器来处理未处理的异常,并且可以根据需要进行复杂设置,但这是基本思想。
当然,您也可以使用Session,但是TempData更合适,因为使用它们后会丢弃这些值。
另一方面,如果您正在使用ajax与您的操作进行交互,那么它就是纯客户端脚本和dom操作。
关于jquery - 从ASP.NET MVC 4 Razor的 Controller 返回JavaScript调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17300692/