使用foreach迭代类似记录

时间:2019-11-05 12:07:24

标签: c# sql asp.net-mvc

我一直试图通过使用@foreach()来显示记录及其相关记录,但是每次我不断收到错误消息“ foreach语句不能对类型变量进行操作。”。 VS解决方案基于“代码优先”模型,并且此操作仅在单个类上。 对此的任何帮助和指导都将有所帮助:

模型:

public class SingleView //USSD
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ID { get; set; }

    public string Client { get; set; }
    public string PolicyNo { get; set; }
    public Nullable<short> PolicyType { get; set; }
    public string InsurerName { get; set; }
    public Nullable<System.DateTime> RenewalDate { get; set; }
    public string Status { get; set; }
    public string Telephone { get; set; }
}

控制器

    public ActionResult Details(Int id)
    {
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        SingleView singleView = db.SingleViews.Find(id);
        if (singleView == null)
        {
            return HttpNotFound();
        }
        return View(singleView);
    }

视图:

    @model  MinetSingleView.Models.SingleView
    @{

                    @foreach (var item in Model)
                    {
                        <tr>

                            <td>@Html.DisplayFor(model => model.Client)</td>
                            <td> @Html.DisplayFor(model => model.InsurerName)</td>
                            <td>Product Type</td>
                            <td>@Html.DisplayFor(model => model.PolicyType)</td>
                            <td>@Html.DisplayFor(model => model.RenewalDate)</td>
                            <td>@Html.DisplayFor(model => model.PolicyNo)</td>
                            <td>@Html.DisplayFor(model => model.Telephone)</td>
                            <td>@Html.DisplayFor(model => model.Status)</td>
                        </tr>
                    }
           }

“详细信息”部分使用自动递增的“ ID”作为id参数 例如本地主机:65129 /首页/详细信息/ 16

3 个答案:

答案 0 :(得分:1)

您的模型是一个单个对象,控制器的签名建议它应该仅返回一个对象的数据-它需要一个id Details(Int id)

您不需要foreach

请考虑以下代码段。

var c = new SomeClass();

foreach( var item in c ) 
{
   What to iterate through here? 
}

返回多个对象的方法如下所示。

public ActionResult Details(sring clientName )
{
    if (string.IsNUllOrEmpty(clientName))
    {
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
    }

    var svs = db.SingleViews.Where( sv => sv.Client == clientName).ToList();
    if (!svs.Any())
    {
        return HttpNotFound();
    }
    return View(svs);
}

此视图的Model将是一个集合,然后您可以使用foreach

答案 1 :(得分:0)

控制器

  public ActionResult Details(Int id)
    {
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        List<SingleView> singleView = db.SingleViews.count > 0 ?
                                 db.SingleViews.where(a => a.id == id).tolist() : null ;
        if (singleView == null)
        {
            return HttpNotFound();
        }
        return View(singleView);
    }

查看

    @model  List<MinetSingleView.Models.SingleView>
    @{

                    @foreach (var item in Model)
                    {
                        <tr>

                            <td>@Html.DisplayFor(model => model.Client)</td>
                            <td> @Html.DisplayFor(model => model.InsurerName)</td>
                            <td>Product Type</td>
                            <td>@Html.DisplayFor(model => model.PolicyType)</td>
                            <td>@Html.DisplayFor(model => model.RenewalDate)</td>
                            <td>@Html.DisplayFor(model => model.PolicyNo)</td>
                            <td>@Html.DisplayFor(model => model.Telephone)</td>
                            <td>@Html.DisplayFor(model => model.Status)</td>
                        </tr>
                    }
           }

答案 2 :(得分:0)

  

“ foreach语句无法对类型变量进行操作。”

出现此错误是因为foreach语句只能在集合上工作。 您的SingleView不是集合。您可以通过实现GetEnumerator

使其变得可迭代

无论如何,最简单的方法就是将其转换为列表。

并将列表传递到视图

只需遵循 tymtams 示例。

并在您的视图中添加此行

 @model  List<MinetSingleView.Models.SingleView>