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>
答案 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);