【发布时间】:2018-10-17 15:37:21
【问题描述】:
2 个模型类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.ComponentModel.DataAnnotations;
namespace CareCompProj.Models
{
public enum Profession { Counsellor, Physio, Doctor }
public class HealthProfessional
{
public int ID { get; set; }
[Required]
[StringLength(50)]
[Display(Name = "Name")]
public string Name { get; set; }
public bool AcceptsMedicalCard { get; set; }
[Required]
[StringLength(80)]
[Display(Name = "Address")]
public string Address { get; set; }
[Required]
public Profession Profession { get; set; }
public ICollection<Review> HealthReviews { get; set; }
public double CalculateAverageRating()
{
var averageRating = HealthReviews.Average(r => r.Rating);
return averageRating;
}
public ICollection<Client> Clients { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.ComponentModel.DataAnnotations;
namespace CareCompProj.Models
{
public class Review
{
public int ID { get; set; }
public int? ClientID { get; set; }
public int? HealthProfessionalID { get; set; }
[Required]
[Range(0, 5, ErrorMessage = "Please select number between 1 and 5")]
public int Rating { get; set; }
[Required]
public string ReviewText { get; set; }
public bool WouldRecommend { get; set; }
public virtual Client Client { get; set; }
public HealthProfessional HealthProfessional { get; set; }
}
}
我的两个问题是
- 当我使用在 Healthprofessional 类中创建的方法时,我得到 ArgumentNullException: Value cannot be null。 参数名称:来源
例如
@foreach (var item in Model){
<p> @item.CalculateAverageRating() </p>
}
- 如果我使用在 Healthprofessional Index 控制器方法中创建的 ViewBag。这将返回 Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable
1[<>f__AnonymousType22[CareCompProj.Models.HealthProfessional, System.Double]]
当我转到应该评分的页面 URL 时。
这是我在尝试获得平均评分时在剃刀视图中引用的 ViewBag(在 healthprofessional 控制器索引方法中创建)
ViewBag.profRatings = _context.HealthProfessionals.Include(p => p.HealthReviews)
ViewBag.profRatings = _context.HealthProfessionals.Include(p => p.HealthReviews)
.Select(x => new
{
HealthProfessional = x,
RatingAverage = x.HealthReviews.Any() ?
x.HealthReviews.Average(v => (v.Rating)) : 0
});
卫生专业人员使用的剃须刀索引视图
@model IEnumerable<CareCompProj.Models.HealthProfessional>
对此的任何帮助将不胜感激。谢谢
【问题讨论】:
-
如果你得到一个
ArgumentNullException,那是因为HealthReviews是null- 确保在将模型传递给视图之前填充它(不要使用ViewBag)
标签: c# asp.net-mvc razor entity-framework-core average