目前,我有一个全局过滤器GlobalizationFilter,用于检查路由值,cookie和浏览器语言标头,以确定请求的正确文化设置:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
// determine cultureInfo
Thread.CurrentThread.CurrentCulture = cultureInfo;
Thread.CurrentThread.CurrentUICulture = cultureInfo;
}
Run Code Online (Sandbox Code Playgroud)
这一切都有效,但模型绑定过程似乎发生在全局过滤器之前,因此模型绑定器不会考虑文化设置.
这导致解释双值,DateTime值等的问题.
我可以将文化检测代码移到其他位置,但我不喜欢我的任何选择:
应用程序的BeginRequest事件.此时路由尚未发生,因此我将不得不/en-US/从URL 手动取出文化令牌.这是不可接受的.
控制器的Initialize()方法.这将迫使我为所有控制器编写基类,并从中继承现有的控制器.我不喜欢这个,但如果没有更好的结果,我会选择这个解决方案.
理想情况下,我想找到一些方法在"路由完成"和"模型绑定开始"事件之间注入我的代码,但我在MSDN/Google上没有发现任何内容.
或者也许还有其他方法可以处理我不知道的MVC3全球化?
在此先感谢任何贡献.
是否可以使用C#将DLL文件注入到诸如explorer或svchost的进程中?我知道这在C++中是可行的,但它是否在C#中?如果是这样,DLL的编写方式是否重要,例如它是否会在C++ DLL或Visual Studio C#.NET DLL之间有所不同?如果这是可能的话,有人可以发布我可以用来执行此操作的代码.非常感谢你.
我有以下模型类(为简单起见而剥离):
public class Info
{
public int IntData { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是我使用此模型的Razor表单:
@model Info
@Html.ValidationSummary()
@using (Html.BeginForm())
{
@Html.TextBoxFor(x => x.IntData)
<input type="submit" />
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我在文本框中输入非数字数据,我会收到一条正确的验证消息,即:"值'qqqqq'对字段'IntData'无效".
但是如果我输入一个很长的数字序列(如345234775637544),我会收到一个EMPTY验证摘要.
在我的控制器代码中,我看到的ModelState.IsValid是false预期的,ModelState["IntData"].Errors[0]如下所示:
{System.Web.Mvc.ModelError}
ErrorMessage: ""
Exception: {"The parameter conversion from type 'System.String' to type 'System.Int32' failed. See the inner exception for more information."}
(exception itself) [System.InvalidOperationException]: {"The parameter conversion from type 'System.String' to type 'System.Int32' failed. See the inner exception for more information."}
InnerException: {"345234775637544 is …Run Code Online (Sandbox Code Playgroud) c# validation defaultmodelbinder model-binding asp.net-mvc-3
我有一个基本类型的IEnumerable作为我的模型.
我需要在列表中显示不同的HTML,具体取决于具体类型.
因此,结果列表可能与HTML中的类似:
<ul>
<li class="points">Points - Item 1 - 10 points <a href="#">Remove</a></li>
<li class="media">Media - Item 2 - your_uploaded_image.jpg <a href="#">Remove</a></li>
<li class="content">Content - Item 3 <a href="#">Remove</a></li>
</ul>
Run Code Online (Sandbox Code Playgroud)
我可能会在稍后添加另一种类型,所以下面的解决方案并不是我真正想要的.
@foreach(var item in Model)
{
if(item is PointImpl)
{
var pointItem = item as PointImpl;
<li class="points">Points - @pointItem.Name - @pointItem.Points points <a href="#">Remove</a></li>
}
else if(item is MediaImpl)
{
var mediaItem = item as MediaImpl;
<li class="media">Media - @mediaItem.Name - @mediaItem.FileName <a href="#">Remove</a></li>
}
/*
More implementations …Run Code Online (Sandbox Code Playgroud) 我正在编写一个Store过程,该过程对数百万个数据进行SUM,AVG操作,并按3到5列进行分组.我想知道我是否在C#中这样做意味着如果我只读取数据库中的数据到C#对象并在对象(或数据表)中进行计算(总和,平均).这会改善性能吗?
我喜欢创建更快的应用程序.
提前致谢.Shuvra