Вернуть связанные данные таблицы в MVC просмотре - PullRequest
1 голос
/ 28 мая 2020
• 1000 ,

Ошибка CS1061 'RoundViewModel' не содержит определения для 'Score', и не может быть найден доступный метод расширения 'Score', принимающий первый аргумент типа 'RoundViewModel' (если вам не хватает использования директива или ссылка на сборку?)

Код для создания.

public ActionResult Create()
{
   //Get database values
   var dbcourse = db.Course.ToList();

   //Make selectlist, which is IEnumerable<SelectListItem>
   var courseNameDropdownList = new SelectList(db.Course.Select(item => new SelectListItem()
   {
       Text = item.CourseName.ToString(),
       Value = item.CourseId.ToString()
   }).ToList(), "Value", "Text");

   // Assign the Selectlist to the View Model  
   var viewCourse = new RoundViewModel()
   {
       Course = dbcourse.FirstOrDefault(),
       // The Dropdownlist values
       CourseNamesDropdownList = courseNameDropdownList,
   };
   return View(viewCourse);
}

Код для RoundViewModel.

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Threading.Tasks;
using System.Web.Mvc;

namespace GolfScore.Models
{
    public class RoundViewModel
    {
       [Key]
       public int RoundId { get; set; }

       [Display(Name = "Round")]
       public int RoundNumber { get; set; }

       [Display(Name = "Date round played")]
       [DataType(DataType.DateTime)]
       public DateTime DateTime { get; set; }

       public int? CourseId { get; set; }
       public virtual CourseViewModel Course { get; set; }

       public IEnumerable<SelectListItem> CourseNamesDropdownList { get; set; }
    }
}

код для ScoreViewModel

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Threading.Tasks;

namespace GolfScore.Models
{
   public class ScoreViewModel
   {
       [Key]
       public int ScoreId { get; set; }

       [Range(1 , 20)]
       public int ScoreTotal { get; set; }

       public int? HoleId { get; set; }
       public virtual HoleViewModel Hole { get; set; }

       public int? RoundId { get; set; }
       public RoundViewModel Round { get; set; }
   }
}

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

    <dd class="col-sm-10">
    <table class="table">
        <tr>
            <th>Hole</th>
            <th>Par</th>
            <th>Score</th>


        </tr>
        @foreach (var item in Model.Course.Holes)
        {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.HoleNumber)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Par.ParNumber)
        </td>

            <td>
                @Html.DisplayFor(model => Model.Score.ScoreTotal )
                <div class="col-md-10">
                    @Html.EditorFor(model => Model.Score.ScoreTotal, new { htmlAttributes = new { @class = "form-control" } })
                    @Html.ValidationMessageFor(model => Model.Score, "", new { @class = "text-danger" })
                </div>
            </td>
    </tr>
        }

    </table>
</dd>

Я попытался изменить RoundViewModel, включив

public int? ScoreId { get; set; }
public virtual ScoreViewModel Score { get; set; }

, но это вызывает следующее ошибка:

Невозможно определить основной конец ассоциации между типами GolfScore.Models.ScoreViewModel и GolfScore.Models.RoundViewModel. Основной конец этой связи должен быть явно настроен с использованием либо API-интерфейса текучести отношений, либо аннотаций данных. ' *

1 Ответ

2 голосов
/ 28 мая 2020

Следующая ошибка:

Невозможно определить основной конец ассоциации между типами GolfScore.Models.ScoreViewModel и GolfScore.Models.RoundViewModel. Главный конец этой ассоциации должен быть явно сконфигурирован с использованием либо API текучести отношений, либо аннотаций данных. отношения. Добавьте атрибут [Required] к атрибуту, в котором вы рассматриваете принципала в отношении.

В вашем случае, я думаю, он должен быть в классе ScoreViewModel. Это означает, что ваш класс сейчас должен быть таким:

public class ScoreViewModel
{
   [Key]
   public int ScoreId { get; set; }

   [Range(1 , 20)]
   public int ScoreTotal { get; set; }

   public int? HoleId { get; set; }
   public virtual HoleViewModel Hole { get; set; }

   public int? RoundId { get; set; }
   [Required]
   public RoundViewModel Round { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...