【问题标题】:How to fetch one row from db in asp mvc如何在asp mvc中从db中获取一行
【发布时间】:2011-11-18 00:05:57
【问题描述】:

ASP.net mvc 对我来说是新的,有一段时间我使用 php(没有 mvc),但现在我很感兴趣,如何从 db 中获取一行?没有 foreach,例如在标题中...

这里有一些代码: 控制器

 public ActionResult Index()
        {
            var pages = (from page in db.Pages where page.PageName == "index" select page).ToList();
            return View(pages);
        }

查看:

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    <% foreach (var item in Model)
       { %>
    <%= Html.Encode(item.Text) %>
    <% }
    %>
</asp:Content>

【问题讨论】:

  • “从数据库中获取一行?没有 foreach”是什么意思? ForEach 正在迭代结果集,并将其传递给视图。是否要将结果集限制为只有一条记录?

标签: asp.net-mvc view


【解决方案1】:

在您的控制器中,您可以使用.FirstOrDefault() 方法代替.ToList(),这将只返回数据库中的第一行。

那么在您看来,您将不需要 foreach。

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    <%= Html.Encode(item.Model.Text) %>
</asp:Content>

【讨论】:

  • 如果它是关于获取“N”条记录,那么“Take”是更合适的扩展方法。无论如何,在上述情况下,即使是“FirstOrDefault”也可以正常工作。
  • 这个作品,谢谢
  • item.Model.Text 不起作用,因为您可能没有将视图模型从 IEnumerable&lt;Page&gt; 更改为 Page
【解决方案2】:

您在这里所做的是创建一个 List 数据类型变量并将其作为模型传递给您的视图。假设这是您的页面需要的唯一数据。这就是你要做的;

 public ActionResult Index()
        {
            string page = db.pages.where(p => p.PageName == "index").FirstOrDefault().PageName;

            return View(page);
        }

在您的页面中,Model 现在将是单个字符串值,您可以这样做;

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">   
     <%= Model %>
</asp:Content>

虽然最佳做法是为页面创建一个 ViewModel,其中包含页面所需的属性并将其作为模型传递。

public class MypageViewModel
{
    public string PageName { get; set; }   
}

然后在控制器中执行此操作

public ActionResult Index()
        {
            MypageViewModel MyModel = new MypageViewModel();
            MyModel.PageName = db.pages.where(p => p.PageName == "index").FirstOrDefault().PageName;

            return View(MypageViewModel);
        }

希望对您有所帮助。

【讨论】:

    【解决方案3】:

    如果您使用的是实体框架:

    var singleItem = db.pages.Find(id);
    

    这将使用您实体的主键。

    如果您有一个由多个属性组成的复合主键,Find 仍然可以工作(因为它可以采用多个值):

    var singleItem = db.pages.Find(key1, key2);
    

    【讨论】:

      猜你喜欢
      • 2016-04-30
      • 2014-05-26
      • 1970-01-01
      • 2015-07-08
      • 1970-01-01
      • 2019-08-31
      • 1970-01-01
      • 2020-02-18
      • 2023-03-04
      相关资源
      最近更新 更多