gpt4 book ai didi

c# - 将查询结果传递给 View 的最佳实践?

转载 作者:太空宇宙 更新时间:2023-11-03 23:30:49 25 4
gpt4 key购买 nike

我是 ASP.NET MVC 的新手,只是好奇下一个场景的最佳实践是什么。我想将查询结果传递给 View :

public class HomeController : Controller
{
public ActionResult Index() // show last 3 posts from the database
{
DB db = new DB(); // DB is just a tiny wrapper to work with LocalDB sql database
db.openConnection(ConfigurationManager.ConnectionStrings["PostDBContext"].ConnectionString);
db.select(@"select p.id, p.title, p.content, FORMAT(p.created_at, 'yyyy-MM-dd') as created_at, u.firstname,
u.lastname, c.name
from posts p
inner join users u on (u.id = p.created_by)
inner join categories c on (c.id = p.category_id)
where p.visibility = 'public'
order by p.id desc limit 3");

while( db.read() > 0 ) // reads one row
{
....
}
db.closeConnection();
return View();
}

我读过几篇关于如何将数据从 Controller 传递到 View 的文章。每篇文章都提到最好和推荐的方法是将数据从模型传递到 View 或创建 ViewModel。所以使用这种方法意味着我需要创建一个 ViewModel 和一个模型,如下所示:

public class FullPostViewModel
{
public List<FullPost> Posts { get; set; }
}

public class FullPost
{
public int id;
public string title;
public string content;
public string created_at;
public string author_firstname;
public string author_lastname;
public string category;
}

然后在 Controller 中:

....
FullPostViewModel model = new FullPostViewModel();

while( db.read() > 0 ) // reads one row
{
model.Posts.Add( new FullPost(){id = Convert.ToInt32(db[0]), title = db[1], ....});
}
...
return View(model);

或者制作三个模型更好:Post、Category、User 然后 FullPost 包含如下内容:

public class FullPost
{
public Post p;
public Category c;
public User u;
}

例如,如果您有更复杂的查询(3、4、... 联接),这将意味着为每个表创建新类。当然,为每个表创建一个类是有意义的,因为这就是 ORM 的全部内容。

我只想知道使用 Models/ViewModels 是否始终是显示查询结果的最佳实践(我知道 ViewBag 用于简单和小数据)?在 Laravel (PHP) 中,当涉及到连接的查询时,我通常不使用模型。它看起来更容易,但这并不意味着它没问题。

最佳答案

我建议您只传递渲染 View 所需的尽可能多或更少的数据。由于您可以创建许多 View 模型,因此您可以随意将属性放入其中。

例如:

当您想显示帖子列表时:return View(List<LightWeightFullPost>)当您想详细显示帖子时:return View(FullPost)

对于 LightWeightFullPost,您可以只发送帖子的名称和作者。这将使您发送的数据尽可能小,因为您不想在 ListView 中显示所有细节。

仅当您确实需要时才建议在 ViewModel 中传递复杂对象。例如:在响应 FullPost ViewModel 时,你真的需要完整的 Category 对象吗?还是一个 CategoryId 就足够了?

关于c# - 将查询结果传递给 View 的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32270966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com