ASP.NET MVC 视图不 return 与控制器动作的一对多关系的子对象
ASP.NET MVC View doesn't return the Child Objects of One-To-Many Relationship to the Controller Action
我有两个 类 具有一对多关系。
public class Article
{
[Key]
public virtual int Id { get; set; }
public virtual string Title { get; set; }
public virtual int SortOrder { get; set; }
public virtual ArticleList ArticleList{ get; set; }
}
public class ArticleList
{
public ArticleList()
{
Articles = new List<Article>();
}
[Key]
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual ICollection<Article> Articles { get; set; }
}
这是控制器获取操作。这里所有与 ArticleList 相关的文章都已正确加载。
public ActionResult EditArticleList(int id)
{
ArticleList articleList = unitOfWork.ArticleListRepository.GetById(id);
return View(articleList);
}
这是控制器post的动作。这里在查看returns数据时,ArticleList相关的文章没有returned在ArticleList对象中
public ActionResult EditArticleList(ArticleList articleList)
{
}
这是对应的视图。
@model Domain.Entities.ArticleList
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>EditArticleList</title>
</head>
<body>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>ArticleList</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.Id)
<div class="form-group">
@Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })
</div>
</div>
@foreach (var p in Model.Articles)
{
<div>
<h3>@p.Title</h3>
<h4>@p.Created</h4>
@Html.ActionLink(p.Title, "Edit", "AdminArticle", new { id = p.Id }, null)
</div>
}
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Save" class="btn btn-default" />
</div>
</div>
</div>
<div class="form-horizonthal">
<div class="form-group">
<input type="button" class="btn btn-default" id="btnsubmit" value="get Value" />
</div>
</div>
}
问题是为什么视图不 return 与 ArticleList 相关的文章到控制器 post 动作?
它们不应该被退回。您从视图中返回的唯一数据是作为表单的一部分 posted 的数据。在您的表单中,您输入了 Id 和 Name - 这就是 posted,没有别的。
事实上,不应 post 编辑这些相关文章,您不应将网页用作所有对象和状态的容器。你有那个数据库。因此,正确的做法是在 post 操作中再次加载相关文章。
我有两个 类 具有一对多关系。
public class Article
{
[Key]
public virtual int Id { get; set; }
public virtual string Title { get; set; }
public virtual int SortOrder { get; set; }
public virtual ArticleList ArticleList{ get; set; }
}
public class ArticleList
{
public ArticleList()
{
Articles = new List<Article>();
}
[Key]
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual ICollection<Article> Articles { get; set; }
}
这是控制器获取操作。这里所有与 ArticleList 相关的文章都已正确加载。
public ActionResult EditArticleList(int id)
{
ArticleList articleList = unitOfWork.ArticleListRepository.GetById(id);
return View(articleList);
}
这是控制器post的动作。这里在查看returns数据时,ArticleList相关的文章没有returned在ArticleList对象中
public ActionResult EditArticleList(ArticleList articleList)
{
}
这是对应的视图。
@model Domain.Entities.ArticleList
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>EditArticleList</title>
</head>
<body>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>ArticleList</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.Id)
<div class="form-group">
@Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })
</div>
</div>
@foreach (var p in Model.Articles)
{
<div>
<h3>@p.Title</h3>
<h4>@p.Created</h4>
@Html.ActionLink(p.Title, "Edit", "AdminArticle", new { id = p.Id }, null)
</div>
}
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Save" class="btn btn-default" />
</div>
</div>
</div>
<div class="form-horizonthal">
<div class="form-group">
<input type="button" class="btn btn-default" id="btnsubmit" value="get Value" />
</div>
</div>
}
问题是为什么视图不 return 与 ArticleList 相关的文章到控制器 post 动作?
它们不应该被退回。您从视图中返回的唯一数据是作为表单的一部分 posted 的数据。在您的表单中,您输入了 Id 和 Name - 这就是 posted,没有别的。
事实上,不应 post 编辑这些相关文章,您不应将网页用作所有对象和状态的容器。你有那个数据库。因此,正确的做法是在 post 操作中再次加载相关文章。