请参阅 C# 中的 ASP.NET MVC 索引页面,使用 URL 中没有 ID 的模型中的数据填充
Posted
技术标签:
【中文标题】请参阅 C# 中的 ASP.NET MVC 索引页面,使用 URL 中没有 ID 的模型中的数据填充【英文标题】:See ASP.NET MVC Index page in C# be populated with data from model without ID in the URL 【发布时间】:2021-11-11 22:24:36 【问题描述】:在我的应用程序中,我在 C# 中使用 Entity Framework 6 和 ASP.NET MVC。
我有一个表,其中包含我计划用来填充索引页面的记录。如何在不让系统将记录的 id 添加到 URL 的情况下填充索引页面。请参见下面的示例。我已经看过路由,但是通过添加自定义路由,当我想要的只是显示为 example.com 的 URL 时,你不得不向 url 添加更多文本。我不想也不需要example.com/MenuRecords/Details/20
让用户看到。
所以example.com
应该在HomeController
的索引视图中从下面的模型中加载以下数据。
index.cshtml
页面调用模型数据如下图:
@model example.Models.tblMenuRecords
@Model.ThisWeeksBestDrink
@Model.ThisWeeksBestAppetizer
@Model.ThisWeeksBestDesert
@Model.ThisWeeksBestLunchSpecial
这是控制器动作方法:
public ActionResult Index()
return View();
如何让 Index
页面正常工作?由于这是从模型调用数据的主页,因此我不能让 URL 包含除 example.com 之外的任何内容 .... 但我明白,当从模型调用数据时,您确实需要某种 ID,但我只是不太明白该怎么做。
我知道有一个包含此默认路由的路由配置,它允许您仅显示域的名称...但是当您尝试从数据库加载数据时这是如何完成的。
routes.MapRoute("Default", "controller/action/id", new controller = "Home", action = "Index", id = UrlParameter.Optional
这是将tblMenuRecords
的实例传递给视图的正确方法吗?
public ActionResult Index()
tblMenuRecords tblMenuRecords = db.tblMenuRecords();
return View(tblMenuRecords);
【问题讨论】:
您不需要 URL 中的 ID 即可将数据推送到模型对象并将其传递给视图。试试看。将 tblMenuRecords 的实例传递给您的视图。 是的,这就是我想要完成的。我试图将 tblMenuRecords 的实例传递给上面显示的索引视图,但是一旦我调用 @Model.ThisWeeksBestLunchSpecial 或该表中的任何其他字段,我就会收到错误消息,即 Not Set Instance of an object,错误指向对字段的调用,除非 url 具有记录的 id,否则页面不会加载。 您没有显示将 tblMenuRecords 的实例从您的操作方法传递到视图中。显示出来。 哦,你的意思是这样的?公共 ActionResult Index() tblMenuRecords tblMenuRecords = db.tblMenuRecords();返回视图(tblMenuRecords); 是的。如果您的视图需要一个模型实例,那么您应该从动作中传递一个给它。您只是在调用构造函数,因此模型属性可能为空。您是否将这些对象存储在数据库中?然后从那里检索它。 【参考方案1】:我认为你必须解决这个问题
public ActionResult Index()
tblMenuRecords tblMenuRecords = db.tblMenuRecords.FirstOrDefault();
return View(tblMenuRecords);
【讨论】:
谢谢谢尔盖。这个实现对我有用。我从没想过要使用 FirstOrDefault,这确实有很大帮助。 不客气!【参考方案2】: I think your view is missed with model. View code should be like below
@model Models.MenuRecords
@
ViewBag.Title = "Menu Records";
<h2>Details</h2>
<div>
<h4>Menus</h4>
<hr />
<table>
<tr>
<td>
@Html.DisplayFor(model => model.ThisWeeksBestDrink)
</td>
<td>
@Html.DisplayFor(model => model.ThisWeeksBestLunchSpecial)
</td>
</tr>
</table>
</div>
I hope, it will help you.
【讨论】:
以上是关于请参阅 C# 中的 ASP.NET MVC 索引页面,使用 URL 中没有 ID 的模型中的数据填充的主要内容,如果未能解决你的问题,请参考以下文章