如何在asp mvc中从db中获取一行

时间:2011-11-17 15:18:08

标签: asp.net-mvc view

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>

3 个答案:

答案 0 :(得分:1)

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

然后在你看来,你不需要foreach。

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

答案 1 :(得分:0)

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

 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);
        }

希望有所帮助。

答案 2 :(得分:0)

如果您使用的是Entity Framework:

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

这将使用您实体的主键。

如果您有一个由多个属性组成的复合主键,则Find仍然有效(因为它可能需要多个值):

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