【问题标题】:How to retrieve one record at a time from SQL Server database in MVC Model如何从 MVC 模型中的 SQL Server 数据库中一次检索一条记录
【发布时间】:2013-08-07 10:35:11
【问题描述】:

我正在开发 Visual C# MVC 项目。我在我的模型中使用 EF 数据库优先方法。我的项目是关于开发一个用户可以购买应用程序的应用市场。我在主页中使用了局部视图,它将在不同的局部视图中包含不同应用程序的详细信息。例如第一个局部视图中的 App1,第二个局部视图中的 App2,依此类推。为此,我用于每个循环。

在每个局部视图中都有一个名为 MoreInfo 的链接,因此当用户单击该链接时,他们将进入 MoreInfo 页面。在数据库中,我有应用信息、应用成本、描述等字段,这些字段将显示在 MoreInfo 页面中。所有这些字段都在一个名为 Apps 表的表中。

当我遵循 Enumerable.FirstOrDefault 方法时,我只能从数据库中检索第一条记录。但是现在我的问题是我需要在我的第一个 MoreInfo 视图中检索第一条记录,在第二个 MoreInfo 视图中检索第二条记录,依此类推。

我的控制器代码是:

public ActionResult MoreInfo()
{    
    var e = Enumerable.FirstOrDefault(db.AppmarketApps);

    return View(e);
}

在我看来我用过:

@model Market.Models.AppmarketApp

<h3><span class="grey"><a href="#">MARKETPLACE</a> &#8250;</span> @Model.Description</h3>

所以在这里我得到了我不想要的所有 MoreInfo 视图的第一个记录描述。 提前致谢。

【问题讨论】:

  • 您应该传入应用程序的 ID 并在您的 MoreInfo 中使用它,而不是总是获得第一条记录。
  • 坚持@AndrewCounts - 这是同一个人的同一个问题?!
  • @AndrewCounts 确实,大部分内容都取自我之前的问题。我试图只在那个问题中进行编辑,但我没有得到任何回复,所以想把它作为新问题。
  • @Belogix 不是同一个问题兄弟。来自同一个人的同一场景的不同问题。

标签: c# sql sql-server asp.net-mvc


【解决方案1】:

扩展我的评论,您应该使用应用程序的 ID,然后将其传递给 MoreInfo,如下所示:

public ActionResult MoreInfo(int id)
{    
    var e = db.AppmarketApps.Where(x => x.ID == id).FirstOrDefault();
    return View(e);
}

【讨论】:

  • 您好,我按照您的步骤操作,但不知道我在做什么错误。我收到参数字典空错误。我所做的是,如果我必须显示 int 类型的字段 OnCost,我键入 public ActionResult MoreInfo(int id) { var e = db.AppmarketApps.Where(x => x.OnCost == id).FirstOrDefault() ;返回视图(e); } 然后在更多信息视图中我输入了@Model.OnCost。但它不起作用。我需要使用 foreach 循环吗??
  • 不,您有db.AppmarketApps.Where(x =&gt; x.ID == id) 即“选择”记录,因此您需要有一个可以在数据库中查找的 ID 或类似名称。然后,在您的视图上,您​​将拥有 @Model.OnCost 或类似的值来获取值。
  • 我在 MoreInfoController 中使用 db.AppmarketApps.where(--)。你能告诉这里的小id和CAPS ID是什么吗?抱歉,这可能是个愚蠢的问题,但我被困在这里
  • 当然,小的id 是传递给动作MoreInfo 的参数,所以将包含我们正在寻找的记录,即记录23。然后在Where 里面是什么被称为 Lambda 所以x =&gt; x.ID 意味着你的AppmarketApp 类将被视为x 所以如果你有一个名为ID 的属性,它将起作用。例如,如果您有一个名为AppID 的属性,您可以将其更改为x =&gt; x.AppID 等。因此,如果您有记录23,您可以只写x =&gt; x.AppID == 23。但是您希望将数字作为参数传入,以便获得x =&gt; x.AppID == id。希望这能让它更清楚吗?
  • 为了进一步帮助我,您能否发布您正在返回的 AppmarketApp 的属性(即 OnCost)等?
【解决方案2】:

在 MoreInfo 的链接中传递感兴趣应用的 ID,并根据该 ID 查询您的数据。

【讨论】:

  • 您好,您能以我的代码为例进行说明吗?请。
  • 我认为您应该查看一个基本的 Asp.Net MVC 教程,该教程向您展示如何从您的视图将信息传递给控制器​​。网上到处都是这样的教程。首先查看 Asp.Net MVC 官方网站本身
【解决方案3】:

最后在玩了我的代码之后,我知道了解决方案。

之前我有两个控制器,分别称为 HomeController 和 MoreInfoController。但由于 MoreInfo 链接位于 Homepage 本身中,因此我删除了 MoreInfo 控制器并将代码添加到 HomeController 本身。这是我添加的代码:

public ActionResult MoreInfo(short id)
    {
        var e = db.AppmarketApps.Where(x => x.ID == id).FirstOrDefault();
        return View(e);
    }

在这里,我将 id 作为参数传递,大写的“ID”是我的主键。因为我想每个视图只显示一条记录,所以我使用了 FirstOrDefault 方法。

在我看来,在此之后我更改了这样的代码:

@Html.ActionLink("MoreInfo", "MoreInfo", new { id = item.ID }, new { @class = "greyButton" })

这里第一个参数“MoreInfo”是链接名称,第二个参数“MoreInfo”是链接。正如您所看到的,当用户单击 MoreInfo 链接时,id 将通过使用

传递给该链接
new { id = item.ID }. 

class 用于样式目的。 为了清楚上面的代码做了什么,它将 id 传递给 MoreInfo 链接,并将显示 AppmarketApps 表中存在的数据。

最后,如果我想显示“名称”,我在视图中使用了@Model.Name,如果我想显示“描述”等等,我使用了@Model.Description。

感谢所有帮助我的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多