【发布时间】:2021-10-21 12:39:11
【问题描述】:
我的控制器有问题。它接受 null。
首先我有这样的 ViewModel
public class FilmVM
{
public Film Film { get; set; }
public IEnumerable<Image> Images { get; set; } = new List<Image>();
public IEnumerable<SimilarFilm> SimilarFilms { get; set; } = new List<SimilarFilm>();
}
控制器看起来像
public ActionResult Edit(FilmVM film)
{
_unitOfWork.Film.Update(film);
return RedirectToAction("Index");
}
索引操作看起来像
public ActionResult Index(int? page)
{
int pageSize = Constaints.Constaint.FilmsCount;
int pageNumber = page ?? 1;
var films = _unitOfWork.Film.GetDatas();
return View(films.ToPagedList(pageNumber, pageSize));
}
VM 中的模型是默认值,例如 Guid、名称等。
查看模型的样子
@model GuessTheMovieApp.ViewModels.FilmVM
@{
ViewBag.Title = "Edit";
}
<div class="wrapper">
<h2>Edit</h2>
@using (Html.BeginForm("Edit", "Films", FormMethod.Post, new { @class = "form-edit-film" }))
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>Editing Film</h4>
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.Partial("EditFilm", Model.Film)
<div class="form-group">
<div class="form-group__input">
<input type="submit" value="Save" class="btn btn-success" />
</div>
</div>
</div>
}
</div>
<div>
@Html.ActionLink("Back to List", "Index")
</div>
部分视图看起来像
@model GuessTheMovieApp.Models.DataBase.Film
<div class="form-horizontal">
<h4>Film</h4>
<hr />
@Html.HiddenFor(model => model.FilmId)
<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>
<div class="form-group">
@Html.LabelFor(model => model.Year, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Year, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Year, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Genre, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Genre, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Genre, "", new { @class = "text-danger" })
</div>
</div>
</div>
我认为它们很常见。
我在 stackoverflow 上看到了类似的问题,但对我没有帮助。所以我在问是否有人知道这个问题的答案,请帮忙。
更新
通过将 Action Edit 更改为这种格式来弄清楚如何使用它
public ActionResult Edit(Film films, IEnumerable<Image> images, IEnumerable<SimilarFilm> similarFilms)
{
_unitOfWork.Film.Update(new FilmVM { Film = films, Images = images, SimilarFilms = similarFilms });
_unitOfWork.Save();
return RedirectToAction("Index");
}
【问题讨论】:
-
你有什么错误?
-
你在
_unitOfWork.Film.Update(film);之后打电话给_unitOfWork.Film.saveChanges吗? -
更多信息,请:您是否真的在保存数据(
.SaveChanges());您能否向我们展示您的Index操作方法(从Edit操作重定向到的方法)? -
当然我会添加保存数据,但现在它没用,因为在控制器中我有 null Film 模型,在表单中保存数据后
-
通过添加索引操作更新问题
标签: c# asp.net .net asp.net-mvc asp.net-mvc-5