小编Ima*_*ani的帖子

Razor视图引擎,如何进入预处理器(#if debug)

我今天正在写我的第一个剃刀页面,无法弄清楚如何进入 #if debug #else #endif

如何在剃刀中输入预处理器?

asp.net-mvc preprocessor razor

223
推荐指数
9
解决办法
6万
查看次数

是否有充分的理由使用FormCollection而不是ViewModel?

我继承了用ASP.Net MVC 4编写的代码库FormCollection.每个post方法都需要一个.除了必须通过带引号的字符串访问值的烦恼之外,它还会导致诸如无法在我的ViewModel属性上使用类似东西ModelState.IsValid[AllowHtml]属性之类的缺点.他们实际上并创建视图模型类为每个自己的看法,(尽管他们是非常实际的实体框架模型类只左右直接包装),但它们仅用于GET方法.

有没有什么我错过的FormCollection给出了为什么这可能实际上是一个好主意的原因?它似乎只有缺点.我想通过使用ViewModels来"修复"它.这需要花费很多工作,因为ViewModel具有接口而不是具体类的属性,这意味着要么编写自定义绑定器,要么更改ViewModel.

但也许在我使用FormCollection有意义的地方缺少一些东西?

asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

43
推荐指数
3
解决办法
2万
查看次数

ResouceManager有时会错误地加载ASP.Net MVC资源文件

概观

我们有一个跨国网站,为其服务的各个国家/地区提供本地化内容.使用标准.Net资源文件实现此本地化.

当我们的Web应用程序在生产环境中启动或回收负载时,有时会显示特定国家/地区的错误资源.例如,英国网站可能会显示法语内容.

这将继续发生,直到重新启动应用程序.

详情

生产环境是Windows Server 2012上的IIS 8.该应用程序在ASP.Net MVC 4中实现.

应用程序决定传入URL所服务的区域设置.所以www.mysite.com将是英国英语www.mysite.fr将是法语等.

我们有一个IHttpModule的实现,它通过Web.config注册.在模块的Init方法中,它将一个处理程序附加到BeginRequest事件.在此方法中,将检查传入的URL,并将线程的CurrentUICulture设置为适当的值.en-GB代表www.mysite.com,fr-FR代表www.mysite.fr等.

该系统在大多数情况下运行良好.但是,有时当应用程序在接收请求时启动时,它将始终为某些资源文件提供错误的内容.

它将继续执行此操作,直到重新启动应用程序.它可能会再次重新启动提供错误的内容.我们必须继续重新启动,直到它提供正确的内容,此时它将保持稳定.

分析

通过在启动期间向应用程序发送请求(使用Fiddler),我们已经能够在开发PC上本地重现这一点.该网站显示了英国版网站上某些资源文件的德语内容.

检查过明显的罪魁祸首在我们的代码(该的CurrentUICulture是由HTTP模块正确设置并保持整个请求的处理是正确的),我们开始来看看资源管理器.

在应用程序以不正确的状态启动时,我们检查了ResourceManager类上_resourceSets属性的内容.这是一个以ISO文化代码为主的字典.检查en-GB的内容,我们发现它确实包含来自德语版资源文件的资源字符串.

似乎有时,当站点在接收请求时启动时,ResourceManager类正在为文化加载错误的资源文件,或者它在其Dictionary中错误地对文件进行了分类.

有没有其他人经历过这种行为,是否有人知道任何变通办法?

谢谢.

c# asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

28
推荐指数
1
解决办法
3003
查看次数

VS2012 $(存在)只接受标量值

好吧,这更多的是构建错误,而不是编程错误.我从来没有太多理由让我的手弄脏构建,所以这个错误令我感到困惑.

我尝试用谷歌搜索这个错误而得不到什么结果,答案要么不存在,要么不可理解或不适用.

错误是:

The "exists" function only accepts a scalar value, but its argument 
"$(PackageSourceManifest)" evaluates to "[same path];[same path]" which is not a 
scalar value. C:\Program Files(x86)\MSBuild\Microsoft\VisualStudio\
                                   v10.0\Web\Microsoft.Web.Publishing.targets
Run Code Online (Sandbox Code Playgroud)

无论如何,我挖到了Microsoft.Web.Publishing.targets,我找到了它出错的行.我有详细的建立在我试图看到的地方,如果我能找到任何可以解决的问题.

没有.

我已经google了如何更改Package Source Manifest,我已经查看了Build Properties,我已经搜索了一个源清单,甚至是搜索源清单的东西,没有.也许我看起来太难了,也许我只是不知道该找什么.

关于如何解决这个问题以及导致这个问题的任何想法?

c# .net-4.5 visual-studio-2012

26
推荐指数
3
解决办法
8046
查看次数

如何将变量传递给ASP.NET MVC应用程序中的自定义ActionFilter

我在我的MVC应用程序中有一个控制器,我正在尝试使用自定义ActionFilterAttribute来记录详细信息,方法是使用onResultExecuted方法.

我阅读本教程以了解并编写自己的动作过滤器.问题是如何将变量从控制器传递给动作过滤器?

  1. 我想获得调用控制器的输入变量.比如说,用户名/用户ID.
  2. 如果(在某些情况下)任何控制器方法抛出异常,我也想记录错误.

控制器 -

[MyActionFilter]
public class myController : ApiController {
    public string Get(string x, int y) { .. }
    public string somemethod { .. }
}
Run Code Online (Sandbox Code Playgroud)

动作过滤器 -

public class MyActionFilterAttribute : ActionFilterAttribute {
    public override void onActionExecuted(HttpActionExecutedContext actionExecutedContext) {
        // HOW DO I ACCESS THE VARIABLES OF THE CONTROLLER HERE
        // I NEED TO LOG THE EXCEPTIONS AND THE PARAMETERS PASSED TO THE CONTROLLER METHOD
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望我在这里解释了这个问题.抱歉,如果我在这里错过了一些基本的物体,我对此完全陌生.

asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

21
推荐指数
1
解决办法
3万
查看次数

子文件夹中的控制器

我的区域在下面.仅突出显示相关部分.

在此输入图像描述

路线表

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        "SubFolder", // Route name
        "SubFolder/ChildController",
        new { controller = "ChildController", action = "Index" },
        new[] { "Practise.Areas.SOProblems.Controllers.SubFolder" });


    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}", // URL with parameters
        new { controller = "Home", action = "Index" } // Parameter defaults
    );
}
Run Code Online (Sandbox Code Playgroud)

这只适用于url是这样的

localhost:2474/SOProblems/ChildController/index 
Run Code Online (Sandbox Code Playgroud)

当url是这样时,这不起作用

localhost:2474/SOProblems/SubFolder/ChildController/index
Run Code Online (Sandbox Code Playgroud)

你能告诉我缺少什么吗?

asp.net-mvc asp.net-mvc-3

20
推荐指数
2
解决办法
3万
查看次数

应用程序级排队/网站流量管理

我们有一个网站应用程序,我们希望在全年的几个点上获得令人难以置信的高流量.我们目前有一些第三方负载平衡软件,可以在繁忙时段将用户重定向到"保留"页面,以防止我们的Web应用程序服务器被请求的数量所窒息.

展望未来,我们希望能够更好地控制此过程并实现某种虚拟队列.当前负载均衡器没有排队功能,但只允许基于速率限制的流量.这是随机的,当您刷新页面(或获得自动刷新)时,运气很好.

我已经在网上阅读了一些关于此的内容,但发现了很少有关如何实现非常基本的虚拟HTTP请求队列的实现细节.当然,公司提供这种服务作为一种完全成熟的服务,例如queue-itNetprecept,但这些服务对我们当前的需求来说似乎有些过分(并且非常昂贵).

有问题的Web应用程序是用ASP.Net MVC编写的.请记住,我们现在不需要诸如"队列优先级"等高级功能,我使用静态队列管理器类创建了一个非常基本的概念验证,ConcurrentQueue<T>但是我想知道这是否是一个有效,可扩展的方法?这是否可以成为主要应用层的一部分?还是应该分开?有没有人知道如何在ASP.Net MVC应用程序中实现这种功能?


编辑:感谢目前为止的答案.大多数答案似乎都涉及很多关于缓存的细节.这已经(非常)在我们的网站上大量使用,使用ASP.Net网络缓存,在负载均衡器级别缓存完整页面请求和使用AppFabric进行对象缓存.

能够管理队列的原因是因为该进程非常重要.我们通过网站有效地为某个产品创建订单.这意味着这些数据库事务正在考虑事项,例如最后一刻的库存检查等.这就是性能问题出现的地方,这就是想要实现某种排队系统的原因.

在数据库服务器上投入更多资源并不是一个现实的选择.我真的在寻找这种排队系统(C#或其他)的技术实现细节.对不起,如果最初没有说清楚.

asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

20
推荐指数
2
解决办法
3375
查看次数

Html.BeginForm()和ajax.beginform()之间的区别

MVC3中Html.BeginForm()和Ajax.Beginform()之间的区别是什么.我只想知道我可以使用的场景Html.BeginForm()和我可以使用的场景Ajax.Beginform().

asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

15
推荐指数
3
解决办法
2万
查看次数

ASP.NET MVC4在错误的区域中搜索控制器

我正在使用默认的MVC路由设置:

        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
Run Code Online (Sandbox Code Playgroud)

我将区域定义为:

public class AdministrationAreaRegistration : AreaRegistration
    {
        public override string AreaName
        {
            get
            {
                return "Administration";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
                "Administration_default",
                "Administration/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional }
            );
        }
    }
Run Code Online (Sandbox Code Playgroud)

我在那个区域有一个控制器:

namespace XXX.Areas.Administration.Controllers
{
    public class CountryController : Controller
    {
        public ActionResult Index()
        {
///
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我输入

/行政/国家 …

asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

13
推荐指数
2
解决办法
2650
查看次数

MVC中公共NonAction方法的目的

我刚刚开始在MVC工作,我有一个疑问.

Nonaction我们可以在控制器中创建私有方法,也可以在模型中编写方法并从控制器调用方法,而不是方法.

那么,NonAction在MVC中使用公共方法的真正目的是什么?

asp.net-mvc asp.net-mvc-3 asp.net-mvc-2 asp.net-mvc-4

13
推荐指数
1
解决办法
2万
查看次数