![](/img/trans.png)
[英]What are the best practices to validate Image and upload in ASP.Net Core/EF Core?
[英]Asp.Net Core Views - best practices
我正在開發一個在線商店網站,它將包含一組默認功能,如產品頁面、產品類別、評論、個人購物車等。這是我第一次做這樣的項目,在實現功能的過程中我遇到了一些在視圖中處理不同異常的困難。 因此,我想了解在將來可擴展的視圖中設計好的代碼的最佳實踐。
假設我有一個帶有類別操作的商店 controller,它顯示與我們所在類別相關的產品列表。在相應的類別視圖中,我需要遍歷產品列表並根據用戶的角色和授權(管理員、用戶、訪客)隱藏一些非活性產品。 我現在這樣做的方式是這樣的(代碼已簡化):
@model ProductList
@foreach (var i in Model) {
@if (i.Product.Active || UserManager.IsInRole(User, "Admin")) {
<div class="product">
@if (i.Data.Path == null) {
<img src="placeholder.png">
}
else {
<img src="@i.Data.Path">
}
...
</div>
}
}
雖然直覺上看起來很清楚,但我意識到,一旦我添加更多的條件分支,遲早這會變得非常混亂。 所以我的問題是:還有其他方法可以處理此類異常分支嗎? 我聽說過自定義 HtmlTagHelpers(它可以使代碼看起來更多 HTML,同時保留一些條件邏輯),但看起來需要更多時間來顯式地為每個異常編寫邏輯。
先感謝您!
視圖不得包含數據邏輯,您的所有數據邏輯都必須在后端,並且對於您的情況,將邏輯放在您查詢產品的地方。 例如:
public async Task<IActionResult> Index()
{
var query = UserManger.IsInRole(User, "Admins")
? _context.Set<Products>()
: _context.Set<Products>().Where(x => x.IsActive == false);
Products = await query.Skip(/*number*/).Take(/*quantity*/).ToListAsync();
// ...
}
如評論中所述,視圖邏輯可以在視圖內部進行,例如:
@if(!Product.IsInStock)
{
<span class="text-danger">Not Available</span>
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.