我试图返回一个视图,不会根据我的应用程序可能发生的某些错误向用户发出重定向,我想处理错误+在基本控制器中记录它们,我不希望错误传播到我的Global.asax - Application_Error()方法因为我希望这个方法能够处理我的应用程序中的任何其他错误,例如用户输入虚假URL,有没有人找到解决方法?
注意:我已经离开了我的注释代码,因为我有一些问题的解决方法,这也表明我有可能处理的多个例外...
编辑:如果我在这个OnException覆盖中发出RedirectToAction覆盖一切按预期工作,但我只想返回视图,没有重定向...
我的基本控制器方法是:
protected override void OnException(ExceptionContext filterContext)
{
//dont interfere if the exception is already handled
if (filterContext.ExceptionHandled)
return;
//let the next request know what went wrong
filterContext.Controller.TempData["exception"] = filterContext.Exception;
//log exception
_logging.Error(User.Identity.Name, ExceptionHelper.BuildWebExceptionMessage(filterContext.Exception));
//set up redirect to my global error handler
//if (filterContext.Exception.GetType() == typeof(NoAccessException))
// filterContext.Result = View(new RouteValueDictionary
// (new { area = "", controller = "Error", action = "PublicError" }));
//else {
//Only return view, no need for redirection
filterContext.Result = View(new …Run Code Online (Sandbox Code Playgroud) 更新(2016 年9月21日) - 感谢Digbyswift评论此解决方案仍然适用于MVC5.
更新(2012 年4月30日) - 注意那些在搜索等问题上遇到这个问题的人 - 接受的答案不是我最终如何做到这一点 - 但我接受了它,因为它可能在某些情况下有效. 我自己的答案包含我使用的最终解决方案,它可以重复使用并适用于任何项目.
它也被证实可以在MVC框架的v3和v4中工作.
我有以下模型类型(类的名称及其属性已更改以保护其身份):
public class MyExampleModel
{
public string[] LongPropertyName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后将此属性绑定到一堆(> 150)复选框,其中每个输入名称当然都是LongPropertyName.
表单使用HTTP GET提交到url,并说用户选择其中三个复选框 - url将具有查询字符串 ?LongPropertyName=a&LongPropertyName=b&LongPropertyName=c
那么很大的问题是,如果我选择所有(甚至只有一半!)复选框,我超过了IIS上请求过滤器强制执行的最大查询字符串长度!
我不想扩展它 - 所以我想要一种方法来减少这个查询字符串(我知道我可以切换到POST - 但即便如此,我仍然希望最小化客户端发送的数据中的绒毛数量) .
我想要做的是LongPropertyName绑定到简单的'L',因此查询字符串将成为?L=a&L=b&L=c但不更改代码中的属性名称.
有问题的类型已经有一个自定义模型绑定器(从DefaultModelBinder派生),但它附加到它的基类 - 所以我不想在那里为派生类放置代码.所有属性绑定当前都由标准的DefaultModelBinder逻辑执行,我知道它使用System.ComponentModel中的TypeDescriptors和Property Descriptors等.
我有点希望可能有一个属性我可以申请该物业来完成这项工作 - 是吗?或者我应该考虑实施ICustomTypeDescriptor?
我目前正在使用带有Razor的ASP.Net MVC3开发一个站点.在"查看/共享"文件夹中,我想添加一个名为"Partials"的子文件夹,我可以在其中放置所有部分视图(为了更好地组织网站).
只要在调用视图时总是引用"Partials"文件夹(使用Razor),我就可以毫无问题地执行此操作:
@Html.Partial("Partials/{ViewName}")
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果有一种方法可以将"Partials"文件夹添加到.Net在搜索视图时经历的列表中,这样我就可以调用我的视图而无需引用"Partials"文件夹,如下所示:
@Html.Partial("{ViewName}")
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助!
我一直在使用Html.Action("ActionName", "ControllerName")跨控制器调用子操作,而不需要在Views\Shared中拥有视图.这对于显示会话或cookie信息等内容非常有用.
我想传递额外的参数,而不仅仅是访问cookie,Html.Action("ActionName", "ControllerName")因此动作可以根据传递给原始视图的数据执行不同的代码.
我应该使用不同的方法将参数传递给不同控制器中的子操作吗?如何实现这一目标?
我在我的个人资料页面使用以下LINQ查询:
var userData = from u in db.Users
.Include("UserSkills.Skill")
.Include("UserIdeas.IdeaThings")
.Include("UserInterests.Interest")
.Include("UserMessengers.Messenger")
.Include("UserFriends.User.UserSkills.Skill")
.Include("UserFriends1.User1.UserSkills.Skill")
.Include("UserFriends.User.UserIdeas")
.Include("UserFriends1.User1.UserIdeas")
where u.UserId == userId
select u;
Run Code Online (Sandbox Code Playgroud)
它有一个长对象图并使用许多包含.它现在运行得很好,但是当网站有很多用户时,它会影响性能吗?
我应该用其他方式吗?
linq performance linq-to-entities entity-framework asp.net-mvc-2
我一直在尝试在我的项目中创建一个控制器来提供可能会变得非常复杂的报告.因此,他们可能需要相对较长的时间,进度条肯定会帮助用户知道事情正在发展.该报告将通过AJAX请求启动,其想法是定期JSON请求将获取状态并更新进度条.
我一直在试验AsyncController,因为这似乎是一种很好的方式来运行长进程而不占用资源,但它似乎没有给我任何检查进度的方法(并且似乎阻止了进一步的JSON请求和我还没有发现原因).之后,我尝试将控制器中的静态变量存储进度并从中读取状态 - 但说实话,所有这些看起来都有些笨拙!
感谢所有建议!
最近在我的第一个ASP.Net MVC2 Web应用程序上工作,当我需要在列表框中选择多个值时,我遇到了一些问题.我用一些jQuery解决了这个问题,但是继续编写了一些非常简单的代码来演示.我使用EF作为模型,有两个实体 - Customers和HelpDeskCalls:
控制器:
public ActionResult Edit(int id)
{
Customer currCustomer = ctx.Customers.Include("HelpDeskCalls").Where(c => c.ID == id).FirstOrDefault();
List<HelpDeskCall> currCustCalls = (ctx.HelpDeskCalls.Where(h => h.CustomerID == id)).ToList();
List<SelectListItem> currSelectItems = new List<SelectListItem>();
List<String> selectedValues = new List<string>();
foreach (HelpDeskCall currCall in currCustCalls)
{
bool isSelected = (currCall.ID % 2 == 0) ? true : false;
//Just select the IDs which are even numbers...
currSelectItems.Add(new SelectListItem() { Selected = isSelected, Text = currCall.CallTitle, Value = currCall.ID.ToString() });
//add the selected values …Run Code Online (Sandbox Code Playgroud) 我刚刚将我的asp.net mvc-2网站部署到服务器(使用dotnetpanel).但得到这个错误
A default document is not configured for the requested URL, and directory browsing is not enabled on the server.
Run Code Online (Sandbox Code Playgroud)
我需要什么设置?它的基于dotnetpanel的托管服务器.
给定一个HttpContext(或HttpContextBase),有没有办法获取Controller的实例?
我正在开发一个MVC3应用程序,需要用户对AD进行身份验证.我知道MVC3中有一个选项可以创建一个Intranet应用程序,可以根据AD自动对用户进行身份验证,但它使用Windows身份验证并自动登录.可以在"开放"工作站上访问此应用程序,用户需要输入其域用户名和密码.任何示例或在线教程都会很棒.一个示例项目将是例外.
asp.net-mvc forms-authentication windows-authentication asp.net-mvc-3 asp.net-mvc-2
asp.net-mvc-2 ×10
asp.net-mvc ×7
c# ×3
asp.net ×2
jquery ×1
linq ×1
performance ×1
razor ×1
web-hosting ×1