繁体   English   中英

ASP.NET Core 6 MVC - 返回 IEnumerable 以查看

[英]ASP.NET Core 6 MVC - returning IEnumerable to View

我真的很生疏 ASP.NET MVC 所以 go 对我来说很容易。

您必须想象 UI - 2 个日期选择器和一个提交按钮。 用户选择两个日期。 在提交时,日期用于对后端数据库的查询。 理想情况下,我希望数据显示在同一视图中。 到目前为止,视图看起来像这样:

@model loyalty_rpm_reports.Models.TransactionCriteria
@{
    ViewData["Title"] = "Home Page";
}

<div class="text-center">
    <h1 class="display-4">RPM - Failed Transactions</h1>

    <fieldset> 
        @using (Html.BeginForm("FailedTransactions", "Transactions", FormMethod.Post))
        {
            
            @Html.ValidationSummary()
            <p>
                @Html.LabelFor(x => x.StartDate)
                @Html.EditorFor(x => x.StartDate)
                @Html.ValidationMessageFor(x => x.StartDate)

                @Html.LabelFor(x => x.EndDate)
                @Html.EditorFor(x => x.EndDate)
                @Html.ValidationMessageFor(x => x.EndDate)
                
            </p>    
            <p>
                <button type="submit">Retrieve Data!</button>
            </p>
        }
        
        <!--TO DO results table to go here-->

    </fieldset>  
</div>

视图使用的 model 是TransactionCriteria - 这只是为了存储用户从视图输入的日期。 TransactionCriteria传递给 controller:

using System.ComponentModel.DataAnnotations;

namespace loyalty_rpm_reports.Models
{
    public class TransactionCriteria
    {
        // Both StartDate and EndDate are nullable (DateTime?) otherwise the properties have 
        // a value by default (01/01/0001) so validation passes

        [Display(Name = "Select Start Date")]
        [Required]
        [DataType(DataType.Date)]
        public DateTime? StartDate { get; set; }

        [Display(Name = "Select End Date")]
        [Required]
        [DataType(DataType.Date)]
        public DateTime? EndDate { get; set;}
    }
}

在提交 controller 操作时调用FailedTransactions并查询数据库。 我可以成功查询数据库。

我的问题是:如何在我的视图中显示数据? 当然,我可以将包含结果的IEnumerable传递回视图并显示在表中,但是我必须在所述视图中有第二个@model ,这是不允许的。 再次 - 对此很新,所以 go 简单 - 欢迎提出建议!

[HttpPost]
public IActionResult FailedTransactions(TransactionCriteria transCriteria_)
{
     if (!ModelState.IsValid) 
     {
         return View(); 
     }

     // return top 10 for now - eventually use transCriteria_.StartDate and 
     // transCriteria_.EndDate to query database
     IEnumerable<ImportHistory> objHistoryList = _db.tblRPM_History.Take(10);

     // Can't do the following because I'd have to put another @model in the view
     // return view(objHistoryList)
}

您可以尝试使用 ViewData/ViewBag 或创建一个 ViewModel,其中包含您需要的所有数据,然后使用 viewmodel 返回视图

ViewData["SomeKey"]=objHistoryList ; ViewBag.SomeKey=objHistoryList

您可以查看此文档以获取更多详细信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM