请参阅 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 的模型中的数据填充的主要内容,如果未能解决你的问题,请参考以下文章

Asp.net MVC 用户管理器更新

Asp.Net 5 缺少 Linq to Sql 类

将 excel 表导入 ASP.NET C# MVC

Asp.net MVC 中的重载索引操作

列表中的 ASP.NET MVC C# 列表

C# asp.net MVC3 中的日历控件