我想保存更新称为父编辑操作的局部视图的数据。但更新后的数据不会被保存。
我有一个父表“NZ”和一个孩子一个“MKH”,并试图找回这一切的数据“NZ”编辑action的局部视图,让用户更新。该数据被正确检索,但是当用户更新数据,并按提交不保存任何数据!在另一方面,我想找回“选择”与返回的值不是一个正常的文本项目的项目。
这是我的代码:
//Nz model:
public partial class Nz
{
public Nz()
{
Mkh = new HashSet<Mkh>();
}
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:#########}")]
public decimal TxtId { get; set; }
public int Sn { get; set; }
public string FullName { get; set; }
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")]
public DateTime? BirthDate { get; set; }
public int SexCode { get; set; }
public string InsertUser { get; set; }
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")]
public DateTime InsertDate { get; set; }
public ICollection<Mkh> Mkh { get; set; }
}
//Mkh Model:
public partial class Mkh
{
public int Sn { get; set; }
public decimal TxtId { get; set; }
public int MkhCode { get; set; }
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")]
public DateTime MkhDate { get; set; }
public int Days { get; set; }
public string Notes { get; set; }
public string InsertUser { get; set; }
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")]
public DateTime InsertDate { get; set; }
public MkhType MkhCodeNavigation { get; set; }
public Nz Txt { get; set; }
}
//MkhType Model:
public partial class MkhType
{
public MkhType()
{
Mkh = new HashSet<Mkh>();
}
public int MkhCode { get; set; }
public string MkhName { get; set; }
public string InsertUser { get; set; }
public DateTime InsertDate { get; set; }
public ICollection<Mkh> Mkh { get; set; }
}
这里是我的背景:
public partial class NozContext : DbContext
{
public NozContext()
{
}
public NozContext(DbContextOptions<NozContext> options)
: base(options)
{
}
public virtual DbSet<Mkh> Mkh { get; set; }
public virtual DbSet<MkhType> MkhType { get; set; }
public virtual DbSet<Nz> Nz { get; set; }
public virtual DbSet<Sex> Sex { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlServer("Server=My-PC\\SQLEXPRESS;Database=Noz;Trusted_Connection=True;");
}
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Mkh>(entity =>
{
entity.HasKey(e => e.Sn);
entity.ToTable("Mkh");
entity.Property(e => e.Sn).HasColumnName("sn");
entity.Property(e => e.Days).HasColumnName("days");
entity.Property(e => e.InsertDate)
.HasColumnName("insert_date")
.HasColumnType("datetime")
.HasDefaultValueSql("(getdate())");
entity.Property(e => e.InsertUser)
.IsRequired()
.HasColumnName("insert_user")
.HasMaxLength(20)
.HasDefaultValueSql("(N'any')");
entity.Property(e => e.MkhCode).HasColumnName("Mkh_code");
entity.Property(e => e.MkhDate)
.HasColumnName("Mkh_date")
.HasColumnType("date");
entity.Property(e => e.Notes).HasColumnName("notes");
entity.Property(e => e.TxtId)
.HasColumnName("txt_id")
.HasColumnType("numeric(9, 0)");
entity.HasOne(d => d.MkhCodeNavigation)
.WithMany(p => p.Mkh)
.HasForeignKey(d => d.MkhCode)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_Mkh_Mkh_type");
entity.HasOne(d => d.Txt)
.WithMany(p => p.Mkh)
.HasForeignKey(d => d.TxtId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_Mkh_Nz");
});
modelBuilder.Entity<MkhType>(entity =>
{
entity.HasKey(e => e.MkhCode);
entity.ToTable("Mkh_type");
entity.Property(e => e.MkhCode).HasColumnName("Mkh_code");
entity.Property(e => e.InsertDate)
.HasColumnName("insert_date")
.HasColumnType("datetime")
.HasDefaultValueSql("(getdate())");
entity.Property(e => e.InsertUser)
.IsRequired()
.HasColumnName("insert_user")
.HasMaxLength(20)
.HasDefaultValueSql("(N'any')");
entity.Property(e => e.MkhName)
.IsRequired()
.HasColumnName("Mkh_name")
.HasMaxLength(50);
});
modelBuilder.Entity<Nz>(entity =>
{
entity.HasKey(e => e.TxtId);
entity.ToTable("Nz");
entity.Property(e => e.TxtId)
.HasColumnName("txt_id")
.HasColumnType("numeric(9, 0)");
entity.Property(e => e.BirthDate)
.HasColumnName("birth_date")
.HasColumnType("date");
entity.Property(e => e.InsertDate)
.HasColumnName("insert_date")
.HasColumnType("datetime")
.HasDefaultValueSql("(getdate())");
entity.Property(e => e.InsertUser)
.IsRequired()
.HasColumnName("insert_user")
.HasMaxLength(20)
.HasDefaultValueSql("(N'any')");
entity.Property(e => e.SexCode).HasColumnName("sex_code");
entity.Property(e => e.Sn)
.HasColumnName("sn")
.ValueGeneratedOnAdd();
entity.HasOne(d => d.SexCodeNavigation)
.WithMany(p => p.Nz)
.HasForeignKey(d => d.SexCode)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_Nz_sex");
});
modelBuilder.Entity<Sex>(entity =>
{
entity.HasKey(e => e.SexCode);
entity.ToTable("sex");
entity.Property(e => e.SexCode).HasColumnName("sex_code");
entity.Property(e => e.SexName)
.IsRequired()
.HasColumnName("sex_name")
.HasMaxLength(10);
});
modelBuilder.Entity<Nz>()
.HasAlternateKey(x => x.Sn).HasName("IX_Sn");
}
}
和NzController操作:
public class NzController : Controller
{
private readonly NozContext _context;
public NzController(NozContext context)
{
_context = context;
}
// ........ Some Code here .............
public async Task<IActionResult> Edit(decimal? id)
{
if (id == null)
{
return NotFound();
}
//var Nz = await _context.Nz.FindAsync(id);
var Nz = await _context.Nz
.Include(n => n.Mkh)
.ThenInclude(m => m.MkhCodeNavigation)
.FirstOrDefaultAsync(n => n.TxtId == id.Value);
if (Nz == null)
{
return NotFound();
}
ViewData["SexCode"] = new SelectList(_context.Sex, "SexCode", "SexName", Nz.SexCode);
return View(Nz);
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(decimal id, [Bind("TxtId,Sn,FullName,BirthDate,SexCode,InsertUser,InsertDate")] Nz Nz)
{
if (id != Nz.TxtId)
{
return NotFound();
}
if (ModelState.IsValid)
{
try
{
var Edited = new Nz()
{
TxtId = Nz.TxtId,
BirthDate = Nz.BirthDate,
InsertDate = Nz.InsertDate,
InsertUser = Nz.InsertUser,
FullName = Nz.FullName,
SexCode = Nz.SexCode,
Mkh = Nz.Mkh.Where(m => m.TxtId == Nz.TxtId).ToList(),
};
_context.Update(Edited);
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!NzExists(Nz.TxtId))
{
return NotFound();
}
else
{
throw;
}
}
return RedirectToAction(nameof(Index));
}
ViewData["SexCode"] = new SelectList(_context.Sex, "SexCode", "SexName", Nz.SexCode);
return View(Nz);
}
局部视图“EditNz”:
@model IEnumerable<Mkh>
<h4>MkhTbl</h4>
<hr />
<table class="table">
<thead>
<tr>
<th>
Date
</th>
<th>
Days
</th>
<th>
Notes
</th>
<th>
Mkh Type
</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>
@Html.EditorFor(modelItem => item.MkhDate)
</td>
<td>
@Html.EditorFor(modelItem => item.Days)
</td>
<td>
@Html.EditorFor(modelItem => item.Notes)
</td>
<td>
@Html.EditorFor(modelItem => item.MkhCodeNavigation.MkhName)
</td>
</tr>
}
</tbody>
</table>
@section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}
而在NzController编辑观点前面部分的呼叫:
@model NozCoreWebApp5.Models.Nz
@*@{
ViewData["Title"] = "Edit";
}*@
<form asp-action="Edit">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<input type="hidden" asp-for="TxtId" />
<input type="hidden" asp-for="InsertDate" />
<input type="hidden" asp-for="InsertUser" />
<hr />
<div class="row">
<div class="col-md-3">
<label asp-for="FullName" class="control-label">Full Name</label>
<input asp-for="FullName" class="form-control" readonly/>
<span asp-validation-for="FullName" class="text-danger"></span>
</div>
<div class="col-md-3">
<label asp-for="BirthDate" class="control-label">Birth Date</label>
<input asp-for="BirthDate" class="form-control" readonly/>
<span asp-validation-for="BirthDate" class="text-danger"></span>
</div>
<div class="col-md-3">
<label asp-for="SexCode" class="control-label">Sex</label>
<select asp-for="SexCode" class="form-control" asp-items="ViewBag.SexCode"></select>
<span asp-validation-for="SexCode" class="text-danger"></span>
</div>
</div>
<br />
<div class="form-group">
<input type="submit" value="Save" class="btn btn-default" />
</div>
</form>
<div>
<a asp-action="Index">Nz List</a>
</div>
@{ await Html.RenderPartialAsync("~/Views/Mkhalfa/EditNz.cshtml", Model.Mkh); }
@section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}
现在,当我按下保存按钮(提交),没有数据被保存在一个局部般的日子!为什么?而如何解决好吗?
而如何从MkhType返回值返回选择? (使用MkhCodeNavigation我认为)
这是当我把一个断点在“编辑”变种编辑方法,并试图在部分更新“天”领域发生什么事:
当你看到编辑var为空。这是否意味着没有传递给控制器的数据?怎么解决?
只是意识到你做了什么....
public async Task<IActionResult> Edit(decimal id, [Bind("TxtId,Sn,FullName,BirthDate,SexCode,InsertUser,InsertDate")] Nz Nz)
现在缺少的是在这里从MKH绑定列表,例如未绑定未填写。因此,空的结果。你可以保持结合,但需要在MKH添加到列表
public async Task<IActionResult> Edit(decimal id, [Bind("TxtId,Sn,FullName,BirthDate,SexCode,Mkh,InsertUser,InsertDate")] Nz Nz)
还有一件事你的当前设置不允许多项目进入MKH收集,除1在同一时间。保存并重复,从另一个编辑加载页面。 MKH节省可能会遇到与EF图形问题以及..但我认为你已经占了它,你必须建立的关系。