小编Kam*_*yar的帖子

具有共享布局的ASP.NET MVC区域

我在我的ASP.NET MVC 3应用程序中定义了一个区域(Admin),_ViewStart.cshtml在该区域中创建并添加Layout = "~/Views/Shared/_Layout.cshtml";到该区域以具有统一的站点布局.

我还将以下代码添加到_Layout.cshtml:

if (HttpContext.Current.User.IsInRole("Admin"))
{
    <li>@Html.ActionLink("Items List", "Index", "Items", new { area = "Admin" }, null)</li>
}
Run Code Online (Sandbox Code Playgroud)

Admin区域_Layout.cshtml以其布局正确显示.但是页面中的所有导航链接现在都指向Admin子文件夹.

例如,在我的布局中,我<li>@Html.ActionLink("About Us", "About", "Home")</li>指出了Mysite/Home/About.但点击管理链接后,"关于我们"链接指向/Admin/Home/About.

如果让_Layout.cshtml链接指向正确的地址,我该怎么办?
谢谢.

asp.net-mvc-routing asp.net-mvc-areas asp.net-mvc-3

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

实体框架4.1 InverseProperty属性

只是想了解更多关于RelatedTo属性的信息,我发现它已被EF 4.1 RC中的ForeignKeyInverseProperty属性所取代.

有没有人知道有关此属性变得有用的场景的任何有用资源?

我应该在导航属性上使用此属性吗?例:

public class Book
{
  public int ID {get; set;}
  public string Title {get; set;}

  [ForeignKey("FK_AuthorID")]
  public Author Author {get; set;}
}  

public class Author
{
  public int ID {get; set;}
  public string Name {get; set;}
  // Should I use InverseProperty on the following property?
  public virtual ICollection<Book> Books {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

c# data-annotations entity-framework-4.1

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

将枚举值存储在数据库中

仅供参考:我明确指的是SQL Server 2000-8和C#.因此,像MySql这样具有枚举支持的DBMS不是我的问题的主题.

我知道这个问题在SO中被多次询问过.但是,我仍然在答案中看到,采用不同的方法在db中存储枚举值.

  1. 将枚举保存为db中的int并在代码中提取枚举值(或使用反射的枚举描述属性):
    这是我通常使用的方法.问题是当我尝试从SSMS中的数据库查询时,检索到的数据很难理解.

  2. 将枚举保存为db中的字符串(varchar)并在代码中强制转换为int.
    实际上,这可能是最好的解决方案.但是(不要笑!)它感觉不对.我不确定这个缺点.(除了db中通常可以接受的更多空间之外)还有其他任何反对这种方法的方法吗?

  3. 在db中有一个单独的表,它与代码的枚举定义同步,并在主表和枚举表之间建立外键关系.
    问题是稍后应该添加另一个枚举值,代码和数据库都需要更新.此外,可能会有拼写错误!

所以一般来说,当我们在第二个解决方案中接受db的开销时,在db中存储枚举值的最佳方法是什么?对此有一个明确的设计模式规则吗?
谢谢.

sql-server enums database-design

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

如何检查用户是否正在访问该站点的根URL?

如果用户访问我网站的根网址,我想启动一些脚本.

例如,我想在用户访问时在我的视图中执行某些操作

  • www.example.com
  • example.com
  • www.example.com/
  • http://www.example.com
  • http://example.com

...... [以上的各种组合.]

而不是www.example.com/anything else.
在ASP.NET MVC 3 [Razor]网站和javascript的视图页面中检查这个的最安全的方法是什么?另外,有没有办法找出只使用javascript?
谢谢.

javascript asp.net razor asp.net-mvc-3

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

存储必要的OpenID信息

我正在尝试为我的网站实施OpenID身份验证.这是场景:
我希望用户能够

  • 使用openId登录(用户可以通过访问openid提供商进行验证.无需使用电子邮件密码创建自定义帐户),
  • 通过电子邮件/密码(用户通过填写​​表格在网站上注册)
  • 将开放的ID附加到他/她的帐户(openids +一个帐户的电子邮件).

现在我不知道我应该为open id存储什么凭据.并且不确定数据库架构.这是数据库模式:

Table: Users
UserId => PK
... => Custom info. Not related to authentication.

Table: Authentication  
AuthenticationId => PK
LoginId => (when custom site membership => email address) (when openId => openid unique address)

UserId  => FK to Users.
Provider =>(when custom site membership => "CUSTOM") (when openId => openid provider address)  
Password => filled when using custom membership. empty when using open id.
Run Code Online (Sandbox Code Playgroud)

现在,当用户登录时,无论是使用openid /自定义成员身份,我只需查看身份验证表并查找凭据并获取相应的用户.如果没有用户,我创建一个新用户并在身份验证表中添加一个条目.

  • 主要问题:存储ProviderLoginId(请参阅上面的注释以查看存储在这些字段中的内容)是否足以存储openid身份验证?我应该存储任何其他数据,以便在用户返回时我可以根据我保存的数据对他/她进行身份验证吗?

  • 您是否建议采用其他(更有效)方法来实现此目的?
    谢谢.

architecture openid authentication dotnetopenauth asp.net-mvc-3

10
推荐指数
1
解决办法
754
查看次数

实体框架POCO多层Web应用程序中的实体

我是EF4的新手,之前没有任何经验.所以,如果这是一个非常简单的问题,请耐心等待.我在BOL中有我的POCO实体(.tt文件),DAL中有.edmx文件(EDM),在Presentation层有我的webapp.所有业务逻辑都转到BLL层.以下是参考资料:

UI - > BLL-DAL-BOL
BLL - > DAL-BOL
DAL - > BOL
BOL - >我的项目都没有.

1-我对层次区分的理解是否正确?我是朝着正确的方向吗?2-如何将ASP.NET成员资格提供程序与实体一起使用.我应该实现成员身份,持久性也无知并将sql server中的所有用户表映射到实体?

2-如何添加自定义验证?我不是指maxlength或有效的电子邮件...,我的意思是访问级别.例如,我希望某些用户能够在我的网站中修改字段(比如productprice).我应该在哪里使用User.IsInRole方法?BLL没有任何对用户信息的引用.我应该将一些参数传递给BLL(如"bool CanChangePrice")来澄清访问级别吗?

asp.net entity-framework poco n-tier-architecture

9
推荐指数
1
解决办法
2521
查看次数

设计模式......从哪里开始?(一些真实世界的样本)

我对设计模式概念有点新意.
C#是我的主要编程语言.(我不时使用VB).我不想写一些不灵活,不可扩展和错误的草率代码.
每当我看到一个设计模式在运行时,我就会喜欢它背后的逻辑并理解它,但不幸的是,我在我的项目中实现它们时遇到了麻烦.

你看,有很多设计模式(我认为120+),当我想决定使用哪一种时,我有点迷失.
当谈到使用它们时,我不知道该选择什么.
我从教程中得到的是一些相当简单的代码片段,它远离生产环境.除了DDD模式,我已经设法好好学习它,因为至少有2本好书和很多资源.

现在我的问题
是:有什么地方可以找到一些使用各种设计模式的真实样本吗?至少有一些"更实用"的样本.你知道我能在哪里找到其他模式的书籍/样本/资源吗?
谢谢.

.net design-patterns

9
推荐指数
2
解决办法
1429
查看次数

分层架构中的实体框架

我正在使用实体框架的分层架构.这是我到目前为止所提出的(所有项目除了UI都是类库):

  • 实体:POCO实体.完全坚持无知.没有参考其他项目.由Microsoft的ADO.Net POCO实体生成器生成.

  • DAL:带有上下文类的EDMX(实体模型)文件.(t4生成).参考文献:Entities

  • BLL:业务逻辑层.将在此层上实现存储库模式.参考文献:Entities,DAL.这是填充objectcontext的地方:var ctx=new DAL.MyDBEntities();

  • UI:表示层:ASP.NET网站.引用:Entities,BLL+配置文件中实体的连接字符串条目(问题#2).

现在我的三个问题:

  1. 我的图层判断方法是否正确?
  2. 在我的UI中,我按如下方式访问BLL:
    var customerRep = new BLL.CustomerRepository();
    var Customer = customerRep.GetByID(myCustomerID);

    问题是我必须在我的UI的web.config/app.config中定义实体连接字符串,否则我会得到一个运行时异常.IS定义UI中的实体连接字符串会破坏图层的区别吗?或者它是否可以在多层分层架构中进行访问.

  3. 我应该采取任何额外的步骤来执行chage跟踪,延迟加载等(通过等我的意思是实体框架在传统的1项目,非POCO代码生成中涵盖的功能)?

感谢并为这个冗长的问题道歉.

c# architecture entity-framework-4

9
推荐指数
1
解决办法
3717
查看次数

在LINQ to Entities中使用自定义方法/扩展方法的变通方法

我已经定义了一个GenericRepository类来执行db交互.

 protected GenericRepository rep = new GenericRepository();
Run Code Online (Sandbox Code Playgroud)

在我的BLL类中,我可以查询db,如:

public List<Album> GetVisibleAlbums(int accessLevel)
{
    return rep.Find<Album>(a => a.AccessLevel.BinaryAnd(accessLevel)).ToList();  
}  
Run Code Online (Sandbox Code Playgroud)

BinaryAnd是一种扩展方法,它逐位检查两个int值.例如AccessLevel=5=> AccessLevel.BinaryAnd(5)并且AccessLevel.binaryAnd(1)都返回true.

但是我不能在LINQ查询中使用此扩展方法.我得到一个运行时错误如下:
LINQ to Entities does not recognize the method 'Boolean BinaryAnd(System.Object, System.Object)' method, and this method cannot be translated into a store expression.

还尝试将其更改为自定义方法,但没有运气.解决方法有哪些?

我是否应该获取所有专辑,然后通过foreach循环迭代它们并选择与AccessLevels匹配的专辑?

linq extension-methods linq-to-entities c#-4.0

9
推荐指数
2
解决办法
6264
查看次数

用于在主题上实现不同行为的良好设计模式

这种情况的最佳设计是什么?
我有不同的对象类型:User,Channel,MessageBox,UserGroup,等
User,并Channel可以对其他对象的权限.例如User,将以下枚举定义为其权限MessageBox:

CanRead,
CanWrite,
CanDelete,
...
Run Code Online (Sandbox Code Playgroud)

其他枚举被定义为User其他对象类型的所有者.

此外,Channel在这些对象上具有不同的枚举值.例如,考虑Channel作为所有者和MessageBox对象:

CanDispath
CanRetrieve
...
Run Code Online (Sandbox Code Playgroud)

使用按位比较从数据库中的特定表保存和检索所有权限:

OwnerID........OwnerType........ObjectID........ObjectType........AccessLevel  
  1              User              10           MessageBox            38     
  5             Channel            12           MessageBox            18  
Run Code Online (Sandbox Code Playgroud)

现在在代码背后,实现权限类的最佳方法是什么?

1-定义PermissionManager,UserPermissionManager,ChannelPermissionManager分别类彼此.其他类只是调用PermissionManager:

if (new PermissionManager.HasAccess(CurrentUser,  
                                    CurrentMessageBox, 
                                    UserPermissions.CanReadMessages))  
Run Code Online (Sandbox Code Playgroud)

然后PermissionManager根据OwnerType(UserPermissionManagerChannelPermissionManager)决定与之相关的类,并调用其HasAccess方法.这样,PermissionManager.HasAccess总是被调用,我认为它可以使代码更易于维护和扩展.这是我的首选解决方案,但由于PermissionManager,UserPermissionManagerChannelPermissionManager …

c# architecture design-patterns hierarchy

9
推荐指数
1
解决办法
1334
查看次数