MVC 使用来自另一个模型的下拉列表将行插入数据库
MVC Insert row into database with dropdown from another model
我正在尝试创建一个 "Create" 表单以将新结果插入 table。我有一个映射到此 table 的模型,下面显示的三个模型中的第一个,以及我想用来显示下拉列表数据的另外两个模型,但将结果绑定到 APLayerID、BPlayerID 和 CourseID。
换句话说,我想要一个映射到 EditSingles 中的 APLayerID、BPlayerID 和 COurseID 的 A PlayerNames、B PlayersNames 和 Courses 列表。
我已经尝试创建一个 ViewModel,也在下面,它包含所有这三个模型,并将其传递给视图,但我真的不确定我在做什么!
在我的控制器中,我有一个 _model.SaveResults(EditSingles),如果我只是在视图中使用 EditSingles,它会很好用,但是我想显示球员和球场的名字,这样更容易添加行,而不必记住 ID 号。
public class EditSingles
{
[Key]
public int GameID { get; set; }
public int APlayerID { get; set; }
public int BPlayerID { get; set; }
public int Score { get; set; }
public int Winner { get; set; }
public int GYear { get; set; }
public int CourseID { get; set; }
}
高尔夫球手:
public class Golfer
{
[Key]
public int PlayerID { get; set; }
public string FirstName { get; set; }
public string Surname { get; set; }
public string ImageURL { get; set; }
}
课程
public class Courses
{
[Key]
public int CourseID { get; set; }
public string CourseName { get; set; }
public int CoursePar { get; set; }
public string CourseAddress { get; set; }
[DataType(DataType.Date)]
public DateTime DatePlayed { get; set; }
public string CourseInformation { get; set; }
}
视图模型
public class AdminModel
{
public IEnumerable<EditSingles> EditSingleResults { get; set; }
public IEnumerable<GolferDetails> GolferDetails { get; set; }
public IEnumerable<Courses> CourseDetails { get; set; }
}
您需要一个视图模型,其中包含 EditSingles
的相关属性以及 Golfers
和 Courses
集合的属性
public class EditSinglesVM
{
[Required(ErrorMessage = "Please select player A")]
[Display(Name = "Player A")]
public int APlayerID { get; set; }
....
[Required(ErrorMessage = "Please select a course")]
[Display(Name = "Course")]
public int CourseID { get; set; }
public IEnumerable<SelectListItem> PlayerList { get; set; }
public IEnumerable<SelectListItem> CourseList { get; set }
}
然后在 GET 方法中(假设你创建了一条新记录)
public ActionResult EditSingles(int ID)
{
// Initialize your view model
EditSinglesVM model = new EditSinglesVM();
// Populate the SelectList's
ConfigureViewModel(model);
return View(model);
}
private void ConfigureViewModel(EditSinglesVM model)
{
model.PlayerList = db.Golfers().Select(g => new SelectListItem
{
Value = g.PlayerID.ToString(),
Text = string.Format("{0} {1}", g.FirstName, g.Surname)
});
model.CourseList = db.Courses().Select(c => new SelectListItem
{
Value = g.CourseID.ToString(),
Text = g.CourseName
});
}
并在视图中
@model EditSinglesVM
@using(Html.BeginForm())
{
@Html.LabelFor(m => m.APlayerID)
@Html.DropDownListFor(m => m.APlayerID, Model.PlayerList, "-Please select-")
@Html.ValidationMessageFor(m => m.APlayerID)
....
@Html.LabelFor(m => m.CourseID)
@Html.DropDownListFor(m => m.CourseID, Model.CourseList, "-Please select-")
@Html.ValidationMessageFor(m => m.CourseID)
<input type="submit" ... />
}
并在 POST 方法中
public ActionResult EditSingles(EditSinglesVM model)
{
if (!ModelState.IsValid)
{
ConfigureViewModel(model); // repopulate SelectList's
return View(model(;
}
// Initialize a new data model
// Map the view model properties to it
// Save and redirect
}
我正在尝试创建一个 "Create" 表单以将新结果插入 table。我有一个映射到此 table 的模型,下面显示的三个模型中的第一个,以及我想用来显示下拉列表数据的另外两个模型,但将结果绑定到 APLayerID、BPlayerID 和 CourseID。
换句话说,我想要一个映射到 EditSingles 中的 APLayerID、BPlayerID 和 COurseID 的 A PlayerNames、B PlayersNames 和 Courses 列表。
我已经尝试创建一个 ViewModel,也在下面,它包含所有这三个模型,并将其传递给视图,但我真的不确定我在做什么!
在我的控制器中,我有一个 _model.SaveResults(EditSingles),如果我只是在视图中使用 EditSingles,它会很好用,但是我想显示球员和球场的名字,这样更容易添加行,而不必记住 ID 号。
public class EditSingles
{
[Key]
public int GameID { get; set; }
public int APlayerID { get; set; }
public int BPlayerID { get; set; }
public int Score { get; set; }
public int Winner { get; set; }
public int GYear { get; set; }
public int CourseID { get; set; }
}
高尔夫球手:
public class Golfer
{
[Key]
public int PlayerID { get; set; }
public string FirstName { get; set; }
public string Surname { get; set; }
public string ImageURL { get; set; }
}
课程
public class Courses
{
[Key]
public int CourseID { get; set; }
public string CourseName { get; set; }
public int CoursePar { get; set; }
public string CourseAddress { get; set; }
[DataType(DataType.Date)]
public DateTime DatePlayed { get; set; }
public string CourseInformation { get; set; }
}
视图模型
public class AdminModel
{
public IEnumerable<EditSingles> EditSingleResults { get; set; }
public IEnumerable<GolferDetails> GolferDetails { get; set; }
public IEnumerable<Courses> CourseDetails { get; set; }
}
您需要一个视图模型,其中包含 EditSingles
的相关属性以及 Golfers
和 Courses
public class EditSinglesVM
{
[Required(ErrorMessage = "Please select player A")]
[Display(Name = "Player A")]
public int APlayerID { get; set; }
....
[Required(ErrorMessage = "Please select a course")]
[Display(Name = "Course")]
public int CourseID { get; set; }
public IEnumerable<SelectListItem> PlayerList { get; set; }
public IEnumerable<SelectListItem> CourseList { get; set }
}
然后在 GET 方法中(假设你创建了一条新记录)
public ActionResult EditSingles(int ID)
{
// Initialize your view model
EditSinglesVM model = new EditSinglesVM();
// Populate the SelectList's
ConfigureViewModel(model);
return View(model);
}
private void ConfigureViewModel(EditSinglesVM model)
{
model.PlayerList = db.Golfers().Select(g => new SelectListItem
{
Value = g.PlayerID.ToString(),
Text = string.Format("{0} {1}", g.FirstName, g.Surname)
});
model.CourseList = db.Courses().Select(c => new SelectListItem
{
Value = g.CourseID.ToString(),
Text = g.CourseName
});
}
并在视图中
@model EditSinglesVM
@using(Html.BeginForm())
{
@Html.LabelFor(m => m.APlayerID)
@Html.DropDownListFor(m => m.APlayerID, Model.PlayerList, "-Please select-")
@Html.ValidationMessageFor(m => m.APlayerID)
....
@Html.LabelFor(m => m.CourseID)
@Html.DropDownListFor(m => m.CourseID, Model.CourseList, "-Please select-")
@Html.ValidationMessageFor(m => m.CourseID)
<input type="submit" ... />
}
并在 POST 方法中
public ActionResult EditSingles(EditSinglesVM model)
{
if (!ModelState.IsValid)
{
ConfigureViewModel(model); // repopulate SelectList's
return View(model(;
}
// Initialize a new data model
// Map the view model properties to it
// Save and redirect
}