当我尝试从编辑页面的数据中获取数据时,它显示错误

When i try to get data from data for edit page it's showing me error

当我尝试从编辑页面的数据中获取数据时,它显示以下错误:

所以我正在构建一个网站,当用户可以编辑他的横幅数据时,我想在其中实现一个编辑横幅表单。

这就是我提出的问题,当我 运行 代码时,它 return 总是 null

这是我的控制器:

[HttpGet]
public ActionResult EditBanner(int id)
{
    var abd = (from a in _db.Banner
                where id == a.BannerId
                select a).FirstOrDefault();

    return View(abd);
}

[HttpPost]
public ActionResult UpdateBannerDatas(BannerViewModels bnrupdate)
{
    var bnrdata = _db.Banner.Where(x => x.BannerId == bnrupdate.BannerId).FirstOrDefault();
    if (bnrdata != null)
    {
        bnrdata.BannerTitle = bnrupdate.BannerTitle;
        bnrdata.BannerUrl = bnrupdate.BannerUrl;
        bnrdata.BannerIndex = bnrupdate.BannerIndex;
        bnrdata.BannerDescription = bnrupdate.BannerDescription;
        bnrdata.BannerIndex = bnrupdate.BannerIndex;

        _db.SaveChanges();

    }
    return Redirect("BannerDetails");
}

这是我的视图模型:

using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using SZGMC.Web.Models;

namespace SZGMC.Web.Areas.Admin.ViewModels
{
    public class BannerViewModels
    {
        public int BannerId { get; set; }
        public string BannerTitle { get; set; }
        public string BannerDescription { get; set; }
        public string BannerImg { get; set; }
        public IFormFile BannerImg1 { get; set; }
        public string BannerUrl { get; set; }
        public string BannerIndex { get; set; }
        public int? BMasterId { get; set; }
        public byte? IsDeleted { get; set; }

        public virtual BannerMaster BMaster { get; set; }
    }
}

这是我的模型:

using System;
using System.Collections.Generic;

// Code scaffolded by EF Core assumes nullable reference types (NRTs) are not used or disabled.
// If you have enabled NRTs for your project, then un-comment the following line:
// #nullable disable

namespace SZGMC.Web.Models
{
    public partial class Banner
    {
        public int BannerId { get; set; }
        public string BannerTitle { get; set; }
        public string BannerDescription { get; set; }
        public string BannerImg { get; set; }
        public string BannerUrl { get; set; }
        public string BannerIndex { get; set; }
        public int? BMasterId { get; set; }
        public byte? IsDeleted { get; set; }

        public virtual BannerMaster BMaster { get; set; }
    }
}

这是我的观点:

<form asp-controller="Home" asp-action="UpdateBannerDatas" enctype="multipart/form-data" method="post">

    <div id="main-content">
        <div class="container-fluid">
            <!-- Page header section  -->
            <div class="block-header">
                <div class="row clearfix">
                    <div class="col-lg-6 col-md-5 col-sm-12">
                        <h1>Hi, Welcomeback!</h1>
                        <span>You can edit banner here</span>
                    </div>
                    <div class="col-xl-6 col-md-7 col-sm-12 text-md-right">
                        <div class="d-flex align-items-center justify-content-md-end mt-4 mt-md-0 flex-wrap vivify pullUp delay-550">
                            <div class="mb-3 mb-xl-0 ">
                                <a asp-action="BannerDetails" class="btn btn-dark">Banner List</a>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            <div class="row clearfix">
                <div class="col-12">
                    <div class="card">
                        <div class="body">
                            <div class="header">
                                <h2><strong>Enter Banner Details</strong></h2>
                            </div>
                            <br />
                            <input asp-for="BannerId" type="hidden" />
                            <div class="row">
                                <div class="col-12">
                                    <div class="form-group c_form_group">
                                        <div class="input-group">
                                            <div class="input-group-prepend">
                                                <span class="input-group-text"></span>
                                            </div>
                                            <input type="text" class="form-control" asp-for="BannerTitle" placeholder="Banner Title" aria-label="bannertitle" aria-describedby="basic-addon1">
                                        </div>
                                    </div>
                                </div>
                            </div>
                            <div class="row">
                                <div class="col-6">
                                    <div class="form-group c_form_group">
                                        <label>Banner Description</label>
                                        <div class="input-group">
                                            <textarea class="form-control" asp-for="BannerDescription" aria-label="Banner Description" rows="6"></textarea>
                                        </div>
                                    </div>
                                </div>
                                <div class="col-6">
                                    <div class="drop-zone">
                                        <span class="drop-zone__prompt">Drop file here or click to upload</span>
                                        <input type="file" asp-for="BannerImg1" name="myFile" class="drop-zone__input" accept="image/*" data-allowed-file-extensions='["jpg", "png" , "jpeg"]' required>
                                    </div>
                                </div>
                            </div>
                            <div class="row">
                                <div class="col-6">
                                    <div class="form-group c_form_group">
                                        <div class="input-group">
                                            <div class="input-group-prepend">
                                                <span class="input-group-text"></span>
                                            </div>
                                            <input type="text" class="form-control" asp-for="BannerIndex" placeholder="Banner Index" aria-label="bannerindex" aria-describedby="basic-addon1">
                                        </div>
                                    </div>
                                </div>
                                <div class="col-6">
                                    <div class="form-group c_form_group">
                                        <div class="input-group">
                                            <div class="input-group-prepend">
                                                <span class="input-group-text"></span>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </div>
                            <div class="mb-2" align="center">
                                <button type="submit" class="btn btn-success btn-round">Edit Banner</button>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</form>

当我尝试在浏览器中编辑数据时抛出异常,在数据库中我有值但是当我尝试获取数据时它显示错误。

提前感谢大家的帮助或建议。

根据错误消息,必须传递 BannerViewModels 实例而不是 Banner 实体:

public ActionResult EditBanner(int id)
{
    var abd = _db.Banner.Where(a => a.BannerId == id)
        .Select(b => new BannerViewModels()
        {
            BannerId = b.BannerId,
            BannerTitle = b.BannerTitle,
            BannerDescription = b.BannerDescription,
            BannerImg = b.BannerImg,
            BannerUrl = b.BannerUrl,
            BannerIndex = b.BannerIndex,
            BMasterId = b.BMasterId,
            IsDeleted = b.IsDeleted
        })
        .FirstOrDefault();

    return View(abd);
}

将实体作为数据模型传递给视图是个坏主意。

见下文post:Why it's not a good idea to pass entities as Models in MVC?