[英]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.