我正在設置自定義屬性來保護視圖中的對象。這裏是我的自定義屬性的定義:OnMetadataCreated多次執行
這裏是我的視圖模型:用於安全標籤和安全文本框
public class HomeViewModel
{
[SecureObject(ObjectId = 1)]
[Display(Name = "Name")]
public string Name { get; set; }
[Display(Name = "Address")]
public string Address { get; set; }
}
我定義的幫手。這裏是我的輔助功能:
public static MvcHtmlString SecureLabelFor<TModel, TProperty>(this HtmlHelper<TModel> html, Expression<Func<TModel, TProperty>> expression)
{
var metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
if ((bool)metadata.AdditionalValues["isSecure"])
{
return null;
}
else
{
return html.LabelFor(expression);
}
}
public static MvcHtmlString SecureTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> html, Expression<Func<TModel, TProperty>> expression)
{
var metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
if ((bool)metadata.AdditionalValues["isSecure"])
{
return null;
}
else
{
return html.TextBoxFor(expression);
}
}
所有這一切工作正常,但是,我遇到的問題是,每次我定義一個安全標籤和安全的文本框時,OnMetadataCreated方法被調用。
我正在訪問OnMetadataCreated方法(未在此示例中顯示)上的數據庫以獲取對象的權限,並且我希望避免單個對象的重複行程。
下面是導致OnMetadataCreated要在我看來,兩次調用的代碼示例:
@Html.SecureLabelFor(m => m.Name) @Html.SecureTextBoxFor(m => m.Name)
我如何能避免OnMetadataCreated方法的第二個電話,或避免重複任何建議旅行到數據庫?
在哪些變量並調用數據庫的依賴?你傳遞給你的查詢的參數是什麼,它們在用戶和會話之間有什麼不同? –
對數據庫的調用取決於ObjectId和當前登錄的用戶。我從數據庫中獲取isSecure值。 – TK1
如何在OnMetadataCreated方法中獲取當前登錄的用戶? –