我想知道如果我需要这样做,我如何能够在控制器构造函数内重定向请求?
例如:在构造函数内部我需要使用动态值初始化一个对象,在某些情况下我不想这样做,在这种情况下我想重定向到其他地方.同样,构造函数的其余部分也不会执行"原始跟随操作".
我该怎么做?谢谢
编辑#1
最初我用过:
public override void OnActionExecuting(ActionExecutingContext filterContext)
Run Code Online (Sandbox Code Playgroud)
在那里我可以重定向到其他控制器/动作/ url,但是稍后我需要更改我的控制器,我在其构造函数中初始化变量并且有一些代码确实需要重定向请求:P
我也需要这个,因为OnActionExecuting在控制器构造函数之后执行.在我的逻辑中,重定向需要在那里完成.
我正在使用以下代码
// Model
[DisplayFormat(
ApplyFormatInEditMode = true,
DataFormatString = "{0:dd/MM/yyyy}")]
public DateTime StartDate { get; set; }
// View
@Html.EditorFor(model => model.StartDate)
Run Code Online (Sandbox Code Playgroud)
格式化,StartDate但结果是xx-xx-xxxx而不是xx/xx/xxxx.如何解决这个问题并始终使用xx/xx/xxxx格式?
更新:
改变文化en-US似乎工作:
var culture = new CultureInfo(userCulture);
System.Threading.Thread.CurrentThread.CurrentCulture = "en-US";
System.Threading.Thread.CurrentThread.CurrentUICulture = "en-US";
Run Code Online (Sandbox Code Playgroud)
但这不是一个解决方案,因为我可能正在使用不同的文化,我仍然希望以不同的方式显示日期.
如果当前文化告知应显示日期,dd-MM-yyyy则使用DisplayFormat上述方法无效并且日期不显示dd/MM/yyyy.
自从这个问题提出以来已经过去了 6 年,我本来希望今天能有一个简单的解决方案......但似乎没有。
注意:请阅读其他问题以理解这个概念:
几分钟后,我尝试实现一个简单的示例,并且几乎已经完成了。同时我仍然看到一些问题。我想知道是否有人有关于如何让它变得更好的想法。
使用.NET 6(代码如下)。
问题 1:我不喜欢我们所说的泛型,使用TTargetas User,我们还需要传递T ID类型......为什么通过传递User不足以让编译器知道ID数据类型?示例:class UserService : IBaseDBOperation1<User, Guid>为什么不呢class UserService : IBaseDBOperation1<User>?
问题2:我知道现在我们可以使用带有代码的方法的接口,但是为什么我们仍然需要用两种数据类型精确地定义变量类型并且使用var还不够?好吧,我们可以使用var,但是这样方法就不可见了。而不是:IBaseDBOperation1<User, Guid> serviceU1 = new UserService();........ var serviceU2 = new UserService();...... 这第二个变量将看不到其他方法。
最后一点:如果 C# 允许我们用多个抽象类扩展一个类,那么一切都会变得容易多了……(截至目前,我们的抽象类仅限于 1 个)。
目标:完成6 年前提出的问题中提出的问题......换句话说......避免复制/粘贴,并以某种方式将多个“操作类”“注入/关联/注册/定义”到服务中....那些“操作类”将在多个不同的服务中大量重用...并且我确实希望有一种“干净/漂亮”的方式来设置它,但同时,消费者不应该担心“较低/更深”的杠杆继承泛型。
代码
public abstract class BaseDBEntry<T> where T : struct
{
protected BaseDBEntry()
{
CreatedOn = DateTime.Now; …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用下图(问题的结尾)实现类似于我想要展示的想法.
一切都是从课程开始编码abstract class Base的DoSomething.
我的"服务"需要向消费者提供服务已"注册"的"DoSomethings"类型的"动作",此时我看到自己在服务类上重复(复制/粘贴)以下逻辑:
public async Task<Obj1<XXXX>> DoSomething1(....params....)
{
var action = new DoSomething1(contructParams);
return await action.Go(....params....);
}
Run Code Online (Sandbox Code Playgroud)
我想知道C#中是否还有以不同方式"注册"我想要的所有"DoSomething"?更动态,更少"复制/粘贴",同时在我的消费者类中提供"intellisense"?Somekind为该服务"注入"已接受的"DoSomething"列表.
更新#1 在阅读PanagiotisKanavos关于MEF和检查IoC的其他选项的消息后,我无法找到我正在寻找的确切内容.
我的目标是让我的Service1类(和所有类似的)表现得像一个DynamicObject但是接受的方法是在它自己的构造函数上定义的(我在其中指定DoSomethingX我提供的方法调用.)
示例:我有几个操作(DoSomethingX)作为"BuyCar","SellCar","ChangeOil","StartEngine"等....现在,我想创建一个服务"CarService",只应该提供动作"StartEngine "和"SellCar",而我可能还有其他"服务"与"行动"的其他组合.我想在每个服务的构造函数中定义这个逻辑.然后,在消费者类中,我只想做类似的事情:
var myCarService = new CarService(...paramsX...);
var res1 = myCarService.StartEngine(...paramsY...);
var res2 = myCarService.SellCar(...paramsZ...);
Run Code Online (Sandbox Code Playgroud)
当我使用"CarService"时,我想提供intellisense ....
总结:目标是如何在每个服务中"注册"哪些方法由他提供,给出一个"DoSomethingX"列表,并自动提供它们作为"方法"......我希望我能够解释我的客观/ 愿望.
换句话说:我只是想能够说,我的课Service1是"提供"的行动DoSomething1, DoSomething2和DoSomething3,但与最低线成为可能.不知何故使用类属性的概念,我可以在这里做类似的事情:
// THEORETICAL CODE
[RegisterAction(typeOf(DoSomething1))]
[RegisterAction(typeOf(DoSomething2))]
[RegisterAction(typeOf(DoSomething3))]
public class Service1{
// NO NEED OF EXTRA …Run Code Online (Sandbox Code Playgroud) 好吧,规则" For money,always decimal "不适用于Microsoft开发团队,因为如果它是:
Namespace: Microsoft.VisualBasic
Assembly: Microsoft.VisualBasic (in Microsoft.VisualBasic.dll)
Run Code Online (Sandbox Code Playgroud)
Financial.IPmt并且所有其他方法都将接收/返回decimal而不是double原样.
现在我想知道我是否可以使用这些方法而不用担心圆形错误?
我应该使用其他一些图书馆来处理财务问题吗?如果是的话,你能指点一些好的(供C#使用)吗?
从MVC 2开始,我们可以轻松创建区域.现在我的问题与嵌套区域(区域内的区域)有关.
选择我的" father"区域文件夹,右键单击Add>>否选项new Area.
是否有可能以其他方式做到这一点?或者这个选项会在不久的将来推出吗?
有以下示例:
var myIds = db.Table1.Where(x=>x.Prop2 == myFilter).Select(x=>x.Id).ToList();
var results = db.Table2.Where(x=> myIds.Contains(x.T1)).ToList();
Run Code Online (Sandbox Code Playgroud)
这部分是直截了当的.
但是,现在我面临一个"轻微"的变化,我的"过滤器列表"有2个属性,而不是只有一个:
// NOTE: for stackoverflow simplification I use a basic query to
// get my "myCombinationObject".
// In reality this is a much more complex case,
// but the end result is a LIST of objects with two properties.
var myCombinationObject = db.Table3.Where(x=>x.Prop3 == myFilter)
.Select(x=> new {
Id1 = x.T1,
Id2 = x.T2
}).ToList();
var myCombinationObjectId1s = myCombinationObject.Select(x=>xId1).ToList();
var myCombinationObjectId2s = myCombinationObject.Select(x=>xId2).ToList();
// step#1 - DB …Run Code Online (Sandbox Code Playgroud) 为了测试,我使用了具有以下源代码的Console应用程序:
public string CODEInString = @"namespace MyNamespace.Generator
{
public class Calculator
{
public int Sum(int a, int b)
{
return a + b;
}
}
}";
public void Create()
{
var provider = new CSharpCodeProvider();
var cp = new CompilerParameters
{
GenerateInMemory = false,
OutputAssembly = "AutoGen.dll"
};
provider.CompileAssemblyFromSource(cp, CODEInString);
}
Run Code Online (Sandbox Code Playgroud)
使用此代码在控制台应用程序中,我可以使其工作并创建AutoGen.dll文件,从那时我可以调用计算器的方法.
当我在MVC 3应用程序中执行相同的代码时,我的问题就出现了.如果我使用以下变量,我可以捕获异常.
var compileResult1 = provider.CompileAssemblyFromSource(cp, CODEInString);
Run Code Online (Sandbox Code Playgroud)
'compileResult1.CompiledAssembly'引发System.IO.FileNotFoundException类型的异常'
我还尝试使用Server.MapPath("〜/ bin /")来告诉输出目录.
有人可以帮我吗?谢谢
更新1 我给了正确的用户文件夹的权限,以便写,所以这不是问题.
我已经阅读了几个关于这个主题的问题/文章,我在我的解决方案中测试过,使用相同的代码块的for速度大多数时候都快each.
然而,我的问题与我的页面相关,而在我的页面中,我有大约30个"循环",使用的起始结果each大约是5300ms(平均值),最大值为5900ms,最小值为4800ms.
在我改变它们for并且最终结果出乎意料地变慢之后,花费更多时间作为之前的平均值(并且从未低于4800ms并且甚至高于6000ms).....但当我放入console.time('Time') console.timeEnd('Time')每个单独的时候"循环块"我得到了预期的结果(FOR更快).
这怎么可能,全球"时间"是使用慢for比each?
PS-完整的源代码是巨大的,这里的重要部分是唯一的变化是:循环each转换为for.
用于For循环的样本
var l = list.length;
for (var i=0;i<l; i++) {
}
Run Code Online (Sandbox Code Playgroud)
用于每个循环的样本
$.each(list, function (i, item) {
});
Run Code Online (Sandbox Code Playgroud)
更新#1
console.time('Time')
console.timeEnd('Time').在全球时间我只使用一个"计数器".对于多个计数器,我当然使用不同的名称.更新#2
For或Each)list[i].SomeProperty,imho时间差异永远不会归咎于内部代码(我认为).更新#3
i,ii,iii.var l = list1.length; ...; l = list2.length;
这同样适用于for变量 i, …
简而言之,我使用MVC 5.2.3(包含所有更新的JS框架)开始了一个新项目,期望我从MVC 2获得的验证中遇到的许多问题都得到了解决,我有多么错误.
基本上我疯狂地试图提供验证DateTime和Decimal.
使用十进制字段,使用EN和DE(文化)中的浏览器,我遇到了逗号和点(十进制除法)以及我正在设置的范围的问题.
随着DateTime我甚至尝试了一个DisplayFormat只是显示日期而不是时间,无论如何,日/月/年的顺序与分离.或/或-只是失败.
例子:
这同样适用于日期时间显示格式和类似的JS验证....
我和你们分享我现在拥有的东西:
的TestObject
public class TestObject
{
....
[Display(Name = "D2", ResourceType = typeof(WebApplication1.Models.Res.TestObject))]
[Range(0, 999.9999)]
public decimal? D1 { get; set; }
// On DBContext I have defined the range/precision
// modelBuilder.Entity<TestObject>().Property(x => x.D2).HasPrecision(7, 4);
[Display(Name …Run Code Online (Sandbox Code Playgroud) c# ×5
.net ×3
asp.net-mvc ×2
asp.net ×1
finance ×1
financial ×1
javascript ×1
linq ×1
performance ×1
types ×1
validation ×1
vb.net ×1