C# 在MVC视图中返回相关的表数据
我正在创建一个高尔夫应用程序来存储我所有的高尔夫回合和我的得分 我在C# 在MVC视图中返回相关的表数据,c#,sql-server,model-view-controller,C#,Sql Server,Model View Controller,我正在创建一个高尔夫应用程序来存储我所有的高尔夫回合和我的得分 我在RoundViewModel和ScoreViewModel中得到一个错误,其中我得到以下错误 错误CS1061“RoundViewModel”不包含的定义 “分数”和无可访问的扩展方法“分数”接受第一个 找不到“RoundViewModel”类型的参数(是否缺少 使用指令或程序集引用?) 创建的代码 public ActionResult Create() { //Get database values var db
RoundViewModel
和ScoreViewModel
中得到一个错误,其中我得到以下错误
错误CS1061“RoundViewModel”不包含的定义
“分数”和无可访问的扩展方法“分数”接受第一个
找不到“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);
}
以及创建视图的代码
<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>
但这会导致以下错误:
无法确定服务器之间关联的主体端
键入“GolfScore.Models.ScoreViewModel”和
“GolfScore.Models.RoundViewModel”。其主要目的是
必须使用
关系流API或数据批注。”
非常感谢您对我如何将相关分数数据输入我的创建视图的任何帮助。以下错误:
无法确定类型“GolfScore.Models.ScoreViewModel”和“GolfScore.Models.RoundViewModel”之间关联的主端。必须使用关系fluent 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; }
}
我想我的意思是SQLServer使用数据库来保存数据。找不到编辑标记的方法,否则我会更改它。简单,只需单击“编辑标记”。感谢您似乎解决了无法确定类型之间关联的主体端的错误。剩下的问题现在由我来解决如何将数据发布回数据库。没有进一步的错误消息。因此控制器中的其余代码需要修改。
<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>
public int? ScoreId { get; set; }
public virtual ScoreViewModel Score { get; set; }
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; }
}