没有保存在局部视图数据

问题描述 投票:1回答:1

我想保存更新称为父编辑操作的局部视图的数据。但更新后的数据不会被保存。

我有一个父表“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我认为)

这是当我把一个断点在“编辑”变种编辑方法,并试图在部分更新“天”领域发生什么事:Post Edit Method

当你看到编辑var为空。这是否意味着没有传递给控制器​​的数据?怎么解决?

asp.net-core-mvc entity-framework-core
1个回答
0
投票

只是意识到你做了什么....

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图形问题以及..但我认为你已经占了它,你必须建立的关系。

© www.soinside.com 2019 - 2024. All rights reserved.