我有一组控制器,每个控制器用于每种授权类型.例如,A类授权将拥有一组控制器,每个控制器都需要A类授权.有没有办法将一个[Authorize(Role="Class A")]
属性放在某个适用于每个控制器的地方,而不必用相同的属性装饰每个控制器?
asp.net-mvc controller authorize authorize-attribute asp.net-mvc-3
在MVC3应用程序中,@{ }
在.cshtml
视图中使用razor块内的try catch块被认为是不好的做法吗?
以下是Oracle确认的错误报告:http://bugs.mysql.com/bug.php?id = 67183
情况
当.Include
我在我的存储库中使用链时,我注意到我得到了奇怪的结果 - 主要是被查询的值是从错误的字段返回的(例如,名称最终会出现在描述中 - 但在数据库中所有的值都是正确,他们只在查询后显示错误).我更改了名称,因此关系更加明显,但结构是一样的.我一直在为相关的CrewMember及其相对排名和清除得到错误的值.看起来如果CrewMember中的字段名称与Rank相同,则Rank中该字段的值将变为CrewMember中的值.例如,如果Rank有描述,CrewMember也是如此,那么CrewMember的Rank描述将是CrewMember的描述.
当由于MySQL Connector/NET sql提供程序无法正确形成join
语句而导致类似字段定义时,实体框架无法在2的深度进行格式良好的查询.
定义
这是一个为数据库表建模的类定义.我正在使用C#ASP.NET MVC 3与Entity Framework 4.1和MySQL Connector/NET 6.5版
public class Harbor
{
public int HarborId { get; set; }
public virtual ICollection<Ship> Ships { get; set; }
public string Description { get; set; }
}
public class Ship
{
public int ShipId { get; set; }
public int HarborId { get; set; }
public virtual Harbor Harbor { get; set; } …
Run Code Online (Sandbox Code Playgroud) 我有时会使用一组任务,为了确保它们都在等待我使用这种方法:
public async Task ReleaseAsync(params Task[] TaskArray)
{
var tasks = new HashSet<Task>(TaskArray);
while (tasks.Any()) tasks.Remove(await Task.WhenAny(tasks));
}
Run Code Online (Sandbox Code Playgroud)
然后像这样调用它:
await ReleaseAsync(task1, task2, task3);
//or
await ReleaseAsync(tasks.ToArray());
Run Code Online (Sandbox Code Playgroud)
但是,最近我注意到了一些奇怪的行为,并设置了ReleaseAsync方法是否存在问题.我设法将它缩小到这个简单的演示,如果你包含它,它将在linqpad中运行System.Threading.Tasks
.它也可以在控制台应用程序或asp.net mvc控制器中稍作修改.
async void Main()
{
Task[] TaskArray = new Task[]{run()};
var tasks = new HashSet<Task>(TaskArray);
while (tasks.Any<Task>()) tasks.Remove(await Task.WhenAny(tasks));
}
public async Task<int> run()
{
return await Task.Run(() => {
Console.WriteLine("started");
throw new Exception("broke");
Console.WriteLine("complete");
return 5;
});
}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么异常永远不会出现在任何地方.我想如果等待具有异常的任务,它就会抛出.我能够通过用这样的简单替换while循环来确认这一点:
foreach( var task in TaskArray )
{
await task;//this will throw …
Run Code Online (Sandbox Code Playgroud) 我想nan
从列表中删除s,所以我实现了下面显示的函数.
val it : float list =
[50.0; -20833.33333; 4.50701062e-14; -4.267032701e-15; 3.942195769e-16;
-3.555114863e-17; 3.130384319e-18; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0;
nan; nan; nan; nan; nan; nan; nan; nan; nan]
let rec remove_nan l =
match l with
| [] -> []
| x::rest -> if x=nan then remove_nan rest
else x::(remove_nan rest)
remove_nan points
Run Code Online (Sandbox Code Playgroud)
但是,它不会nan
从列表中删除.他们为什么不被删除?
建议阅读
我怎么在这里结束
我非常相信,在制作软件时,任何事情都要事先做好,以便以后最大限度地减少工作量.因此,我试图确保在接近我的数据库架构和维护时,它可以保持关系完整性,而不是过时或过于复杂.
在查看典型的删除方法CASCADE时,这会让人有些不寒而栗.哎呀,对我目前的情况来说有点过头了.我想保持关系图的完整性,但我不想删除每个图只是因为链的一部分是无关紧要的.因此,我选择采用软删除的方式,以确保数据完整性保留,同时记录可以从相关性中删除.我通过在数据库中的每个叹息表中添加"DateDeleted"字段来完成此操作.
转折点
然而,这显然开始增加太多的复杂性并且值得付出努力.我将逻辑放在不应该去的地方,并且不想在整个应用程序中使这些不良做法永久化.简而言之,我将回滚此实现.
在查找天气或不是人们喜欢软删除时,似乎有很多支持它.事实上,链接的"相似"帖子顶部是"我总是软删除"的最高投票回答.此外,那里和SO周围的大多数答案包括某种"isDeleted"或"isActive"类型的方法.
新的实施理念
链接的"好文章"涵盖了我实际遇到的一些问题.它还提出了一种替代软删除的方法,我从最佳实践的角度出发.建议使用"存档数据库",我在查看软删除时实际考虑过.我决定反对它的原因是因为我之前提到的有关CASCADE删除的观点.我很谨慎从数据库中删除整个图表,因为链的一部分被删除了.但是,这个图表至少可以从档案中保留,所以我不确定它真的那么糟糕.
十字路口
那么,我应该继续添加逻辑,逻辑,逻辑......逻辑吗?或者,我是否应该考虑创建归档数据库,其中大多数逻辑只是位于一个非常复杂的图形管理类中来存储/恢复关系对象图?后者似乎对我来说是最好的做法.
参考:如何将动态用作通用?
public void CheckEntity(int entityId, string entityType = null)
{
dynamic AnyObject = Activator.CreateInstance("Assembly","Assembly.Models.DbModels." + entityType).Unwrap();
CheckWithInference(AnyObject, entityId);
}
private static void CheckWithInference<T>(T ignored, int entityId) where T : class
{
Check<T>(entityId);
}
private static void Check<T>(int entityId) where T : class
{
using (var gr = new GenericRepository<T>())
{
}
}
Run Code Online (Sandbox Code Playgroud)
这进入了CheckEntity(16,"Container");
.第一行运行后,使用调试器检查时AnyObject
变为空白Assembly.Models.DbModels.Container
.如果var AnyType = AnyObject.GetType();
使用,则AnyType
显示为Assembly.Models.DbModels.Container
.但是,当调用CheckWithInference(AnyObject, entityId);
使得异常被抛出时.
我在这里做了一个自包含的例子 - 但它运行没有错误:(
注意,这是在asp.net mvc …
此问题(可通过ID访问的元素)指出,如果元素具有id,则可以基于该id通过变量名访问它.它引起了我的兴趣,因为我在使用Visual Studio 2010进行开发时看到了这个变量.我出于好奇做了一些测试,结果发现它document.getElementById()
仍然比使用变量名更快.所以,我开始尝试浏览窗口,确定它必须window["idName"]
在调试中,并且console.log(window)
无法找到变量实际存储的位置.
当一个元素在html中定义时,<div id="foo">
它在带有变量的javascript中可用foo
(我不打算使用它,这是不好的做法).存储的变量在哪里?
在下面的最小示例中,延迟替换旧内容setTimeout
以便为用户提供完成查看的时间.同时,正在准备新内容,以避免在潜在的昂贵任务期间阻塞用户界面.
var div = document.getElementById('wrapper');
var newContent = document.createElement('ul');
setTimeout(function() {
var header = div.firstElementChild;
header.innerHTML = 'New Content';
header.nextElementSibling.remove();
div.appendChild(newContent);
}, 2000);
// Make new content while we wait
[1, 10, 100, 1000].forEach(function(x) {
var li = document.createElement('li');
li.innerHTML = 'Factorial of ' + x + ' is ' + factorial(x);
newContent.appendChild(li);
});
function factorial(num) {
if (num === 0) {
return 1;
} else {
return (num * factorial(num - 1));
}
}
Run Code Online (Sandbox Code Playgroud)
<div id='wrapper'>
<h1>Old …
Run Code Online (Sandbox Code Playgroud)我正在尝试序列化域模型并遇到一个需要将动态代理转换为POCO的问题.我遇到的问题是通过模型中的虚拟属性存在循环引用.虽然我试图使用[ScriptIgnore]
序列化程序不解析这些属性,但它仍然可以.我相信这是因为对象是动态代理,并且属性中仍然存在一些导致解析器进入的残余(这反过来导致递归错误"循环引用" - 我尝试将递归限制为3步但我得到了错误"超出递归步骤").
如何将对象从动态代理转换为POCO以便可以序列化?
编辑:简单的例子
public class One : BaseViewModel
{
public int OneId { get; set; }
public virtual ICollection<Two> Two { get; set; }
}
public class Two
{
public int TwoId { get; set; }
public int OneId { get; set; }
[ScriptIgnore]
public virtual One One { get; set; }
}
public abstract class BaseViewModel
{
public string AsJson()
{
var serializer = new JavaScriptSerializer();
return serializer.Serialize(this);
}
}
Run Code Online (Sandbox Code Playgroud) c# serialization dynamic-proxy entity-framework-4.1 asp.net-mvc-3
c# ×4
javascript ×2
.net ×1
asp.net-mvc ×1
async-await ×1
authorize ×1
controller ×1
dom ×1
dynamic ×1
exception ×1
f# ×1
generics ×1
html ×1
linq ×1
list ×1
mysql ×1
nan ×1
razor ×1
settimeout ×1
soft-delete ×1
task ×1
try-catch ×1
view ×1