假设以下领域模型。如何从MVC中的表单中检索两个模型?
public class SystemRequirement
{
public int SystemRequirementID { get; set; }
public Platforms Platform { get; set; }
public string CPU { get; set; }
public string RAM { get; set; }
public string Dsiplay { get; set; }
public string Discription { get; set; }
public int GameID { get; set; }
public virtual Game Game { get; set; }
}
public class Game
{
public int GameID { get; set; }
public string Name { get; set; }
public Genres Genre { get; set; }
public DateTime ReleaseDate { get; set; }
public bool Multiplay { get; set; }
public string About { get; set; }
public virtual List<SystemRequirement> SystemRequirements { get; set; }
}
public class GameSystemViewModel
{
public Game Game { get; set; }
public SystemRequirement SystemRequirement { get; set; }
}
我想制作一个表格,允许添加一个包含其系统要求的新游戏。
@model KeyStore.WebUI.Models.GameSystemViewModel
@{
ViewBag.Title = "Add";
Layout = "~/Views/Shared/_AdminLayout.cshtml";
}
<div class="container">
@using (Html.BeginForm("Add", "GameAdmin", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<div class="panel">
<div class="panel-heading">
<h3>Add New Game</h3>
</div>
<div class="panel-body">
@Html.LabelFor(m => m.Game.Name)
@Html.TextBoxFor(m => m.Game.Name)
@Html.LabelFor(m => m.Game.Genre)
@Html.TextBoxFor(m => m.Game.Genre)
@Html.LabelFor(m => m.Game.ReleaseDate)
@Html.TextBoxFor(m => m.Game.ReleaseDate)
@Html.LabelFor(m => m.Game.Multiplay)
@Html.CheckBoxFor(m => m.Game.Multiplay)
@Html.LabelFor(m => m.Game.About)
@Html.TextAreaFor(m => m.Game.About)
</div>
</div>
<div class="panel">
<div class="panel-heading">
<h3>System Requirements</h3>
</div>
<div class="panel-body">
@Html.LabelFor(m => m.SystemRequirement.Platform)
@Html.TextBoxFor(m => m.SystemRequirement.Platform)
@Html.LabelFor(m => m.SystemRequirement.CPU)
@Html.TextBoxFor(m => m.SystemRequirement.CPU)
@Html.LabelFor(m => m.SystemRequirement.RAM)
@Html.TextBoxFor(m => m.SystemRequirement.RAM)
@Html.LabelFor(m => m.SystemRequirement.Dsiplay)
@Html.TextBoxFor(m => m.SystemRequirement.Dsiplay)
@Html.LabelFor(m => m.SystemRequirement.Discription)
@Html.TextAreaFor(m => m.SystemRequirement.Discription)
</div>
</div>
<div class="panel-footer">
<input type="submit" value="Save" class="btn btn-primary" />
</div>
}
</div>
我的控制器类有这三个动作。
- 地址:做游戏视图
- [HttpPost]地址:获取对象和使用LINQ
控制器代码并将它们保存在一个数据库:
public ViewResult Add()
{
GameSystemViewModel g = new GameSystemViewModel();
g.Game = new Game();
g.SystemRequirement = new SystemRequirement();
return View(g);
}
[HttpPost]
public ActionResult Add(GameSystemViewModel g)
{
Game mygame = new Game();
mygame = g.Game;
mygame.SystemRequirements.Add(g.SystemRequirement);
gameRepository.Save(mygame);
return RedirectToAction("Add");
}
但是当表单发布时出现以下错误发生。正如你在本地SystemRequirement中看到的那样NOT NULL。
这是什么问题,我该如何解决?
您可能需要创建一个ViewModel,它将两种模型的组合,然后在您的View中使用它d控制器 –
创建一个ViewModel –
看看http://stackoverflow.com/questions/30196865/mvc-model-properties-and-multiple-forms-on-one-view/30197026#30197026 – Tushar