Webmatrix - 可重复使用的区块代码?

时间:2013-11-20 14:30:31

标签: layout razor webmatrix

所有

我创建了一个SQL查询,通过检查查询字符串和UserID是否返回计数1来检查用户是否拥有数据库中的记录。这是下面的代码,它完全正常:

@{
Layout = "~/_SiteLayout.cshtml";

WebSecurity.RequireAuthenticatedUser(); 

var db = Database.Open("StayInFlorida");

var rPropertyId = Request.QueryString["PropertyID"];
var rOwnerId = WebSecurity.CurrentUserId;

var auth = "SELECT COUNT (*) FROM PropertyInfo WHERE PropertyID = @0 and OwnerID = @1";
var qauth = db.QueryValue (auth, rPropertyId, rOwnerId);
}

@if(qauth==0){
<div class="container">
    <h1>You do not have permission to access this property</h1>
</div>
}

else {
    SHOW CONTENT HERE
}

问题是我需要在至少10个不同的页面上应用此检查,将来可能更多?我全都是使用可重用的代码,但我不知道我怎么能写这一次,并在每个页面上引用它是必要的。我已经尝试在中间嵌套布局页面的代码块中执行此操作,但我遇到了错误。关于什么是最好的方法的任何建议?或者我将不得不将其复制并粘贴到每个页面?

谢谢,加文

1 个答案:

答案 0 :(得分:3)

“Razor”方式是使用函数(http://www.mikesdotnetting.com/Article/173/The-Difference-Between-@Helpers-and-@Functions-In-WebMatrix)。

将以下内容添加到App_Code文件夹中名为Functions.cshtml的文件中:

@functions {        
    public static bool IsUsersProperty(int propertyId, int ownerId)
    {
        var db = Database.Open("StayInFlorida");
        var sql = @"SELECT COUNT (*) FROM PropertyInfo 
                    WHERE PropertyID = @0 and OwnerID = @1";
        var result = db.QueryValue (sql, propertyId, ownerId);
        return result > 0;
    }
}

然后在你的页面中:

@{
    Layout = "~/_SiteLayout.cshtml";
    WebSecurity.RequireAuthenticatedUser(); 

    var propertyId = Request["PropertyID"].AsInt();
    var ownerId = WebSecurity.CurrentUserId;
}

@if(!Functions.IsUsersProperty(propertyId, ownerId)){
<div class="container">
    <h1>You do not have permission to access this property</h1>
</div>
}

else {
    SHOW CONTENT HERE
}