我今天正在写我的第一个剃刀页面,无法弄清楚如何进入 #if debug #else #endif
如何在剃刀中输入预处理器?
我继承了用ASP.Net MVC 4编写的代码库FormCollection
.每个post方法都需要一个.除了必须通过带引号的字符串访问值的烦恼之外,它还会导致诸如无法在我的ViewModel属性上使用类似东西ModelState.IsValid
或[AllowHtml]
属性之类的缺点.他们实际上并创建视图模型类为每个自己的看法,(尽管他们是非常实际的实体框架模型类只左右直接包装),但它们仅用于GET方法.
有没有什么我错过的FormCollection给出了为什么这可能实际上是一个好主意的原因?它似乎只有缺点.我想通过使用ViewModels来"修复"它.这需要花费很多工作,因为ViewModel具有接口而不是具体类的属性,这意味着要么编写自定义绑定器,要么更改ViewModel.
但也许在我使用FormCollection有意义的地方缺少一些东西?
我们有一个跨国网站,为其服务的各个国家/地区提供本地化内容.使用标准.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中错误地对文件进行了分类.
有没有其他人经历过这种行为,是否有人知道任何变通办法?
谢谢.
好吧,这更多的是构建错误,而不是编程错误.我从来没有太多理由让我的手弄脏构建,所以这个错误令我感到困惑.
我尝试用谷歌搜索这个错误而得不到什么结果,答案要么不存在,要么不可理解或不适用.
错误是:
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,我已经搜索了一个源清单,甚至是搜索源清单的东西,没有.也许我看起来太难了,也许我只是不知道该找什么.
关于如何解决这个问题以及导致这个问题的任何想法?
我在我的MVC应用程序中有一个控制器,我正在尝试使用自定义ActionFilterAttribute来记录详细信息,方法是使用onResultExecuted方法.
我阅读本教程以了解并编写自己的动作过滤器.问题是如何将变量从控制器传递给动作过滤器?
控制器 -
[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)
我希望我在这里解释了这个问题.抱歉,如果我在这里错过了一些基本的物体,我对此完全陌生.
我的区域在下面.仅突出显示相关部分.
路线表
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)
你能告诉我缺少什么吗?
我们有一个网站应用程序,我们希望在全年的几个点上获得令人难以置信的高流量.我们目前有一些第三方负载平衡软件,可以在繁忙时段将用户重定向到"保留"页面,以防止我们的Web应用程序服务器被请求的数量所窒息.
展望未来,我们希望能够更好地控制此过程并实现某种虚拟队列.当前负载均衡器没有排队功能,但只允许基于速率限制的流量.这是随机的,当您刷新页面(或获得自动刷新)时,运气很好.
我已经在网上阅读了一些关于此的内容,但发现了很少有关如何实现非常基本的虚拟HTTP请求队列的实现细节.当然,公司提供这种服务作为一种完全成熟的服务,例如queue-it和Netprecept,但这些服务对我们当前的需求来说似乎有些过分(并且非常昂贵).
有问题的Web应用程序是用ASP.Net MVC编写的.请记住,我们现在不需要诸如"队列优先级"等高级功能,我使用静态队列管理器类创建了一个非常基本的概念验证,ConcurrentQueue<T>
但是我想知道这是否是一个有效,可扩展的方法?这是否可以成为主要应用层的一部分?还是应该分开?有没有人知道如何在ASP.Net MVC应用程序中实现这种功能?
编辑:感谢目前为止的答案.大多数答案似乎都涉及很多关于缓存的细节.这已经(非常)在我们的网站上大量使用,使用ASP.Net网络缓存,在负载均衡器级别缓存完整页面请求和使用AppFabric进行对象缓存.
能够管理队列的原因是因为该进程非常重要.我们通过网站有效地为某个产品创建订单.这意味着这些数据库事务正在考虑事项,例如最后一刻的库存检查等.这就是性能问题出现的地方,这就是想要实现某种排队系统的原因.
在数据库服务器上投入更多资源并不是一个现实的选择.我真的在寻找这种排队系统(C#或其他)的技术实现细节.对不起,如果最初没有说清楚.
MVC3中Html.BeginForm
()和Ajax.Beginform
()之间的区别是什么.我只想知道我可以使用的场景Html.BeginForm
()和我可以使用的场景Ajax.Beginform
().
我正在使用默认的MVC路由设置:
Run Code Online (Sandbox Code Playgroud)routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } );
我将区域定义为:
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)
当我输入
/行政/国家 …
我刚刚开始在MVC工作,我有一个疑问.
Nonaction
我们可以在控制器中创建私有方法,也可以在模型中编写方法并从控制器调用方法,而不是方法.
那么,NonAction
在MVC中使用公共方法的真正目的是什么?