Повторяйте похожие записи, используя foreach - PullRequest
0 голосов
/ 05 ноября 2019

Я пытался отобразить записи и связанные с ними записи с помощью @foreach (), но каждый раз я получаю сообщение об ошибке «оператор foreach не может работать с переменными типа ..». Решение VS основано на модели Code First, и эта операция выполняется только для одного класса. Любая помощь и руководство по этому вопросу будут полезны:

Модель:

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, например localhost: 65129 / Home / Details / 16

Ответы [ 3 ]

1 голос
/ 05 ноября 2019

Ваша модель представляет собой один объект, и подпись контроллера предполагает, что он должен возвращать данные только для одного объекта - для этого требуется один идентификатор 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);
}

The Model для этого представления будет коллекция, а затем вы можете использовать foreach.

0 голосов
/ 05 ноября 2019

"оператор foreach не может работать с переменными типа .."

Эта ошибка возникает, потому что оператор foreach может работать только с коллекцией. Ваш SingleView не является коллекцией. Вы можете сделать его итеративным, реализовав GetEnumerator

В любом случае, самый простой способ для вас - сделать так, чтобы он был преобразован в список.

И передал список в представление

просто следуйте tymtams примеру.

И добавьте эту строку в ваше представление

 @model  List<MinetSingleView.Models.SingleView>
0 голосов
/ 05 ноября 2019

Контроллер

  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>
                    }
           }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...