.Net Core 3 Razor 页面 Admin/Product/Upsert.cshtml IEnumerable<SelectListItem> 错误
.Net Core 3 Razor Page Admin/Product/Upsert.cshtml IEnumerable<SelectListItem> Error
我正在尝试开发一个带有剃刀页面的项目。当我说从产品页面创建产品时,我遇到了 IEnumerable 错误。由于我不再知道该怎么做,所以我想在这里分享我的问题。预先感谢您的回答。我还写了一些单词的土耳其语等价物来理解:
urun->产品
urunAdi->产品名称
urunAciklama->产品描述
类别->类别
resimYolu->imagePath
错误前:
错误后:
Admin\Product\Upsert.cshtml:
@page
@model Propeboru.Pages.Admin.Product.UpsertModel
<form method="post" asp-action="Upsert" enctype="multipart/form-data">
<div class="container">
<div class="row px-2 mx-2 border">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
@if (Model.ProductObj.Product.urunID != 0)
{
<input type="hidden" asp-for="ProductObj.Product.urunID" />
}
<div class="col-12 px-3" style="border-bottom:1px solid #325d88">
<h2 class="text-primary">@(Model.ProductObj.Product.urunID != 0 ? "Düzenle" : "Oluştur") Ürünler</h2>
</div>
<div class="col-8 pt-3">
<div class="form-group row">
<div class="col-3">
<label asp-for="ProductObj.Product.urunAdi"></label>
</div>
<div class="col-9">
<input class="form-control" asp-for="ProductObj.Product.urunAdi" />
<span class="text-danger" asp-validation-for="ProductObj.Product.urunAdi"></span>
</div>
</div>
<div class="form-group row">
<div class="col-3">
<label asp-for="ProductObj.Product.urunAciklama"></label>
</div>
<div class="col-9">
<textarea class="form-control" asp-for="ProductObj.Product.urunAciklama" id="txtDesc" style="height:200px;"></textarea>
</div>
</div>
<div class="form-group row">
<div class="col-3">
<label asp-for="ProductObj.Product.kategoriID"></label>
</div>
<div class="col-9">
@Html.DropDownListFor(m => m.ProductObj.Product.kategoriID,
Model.ProductObj.CategoryList ,
"- Lütfen ürünün kategorisini seçiniz !-",
new { @class = "form-control" })
<span class="text-danger" asp-validation-for="ProductObj.Product.kategoriID"></span>
</div>
</div>
<div class="form-group row">
<div class="col-3">
<label asp-for="ProductObj.Product.resimYolu"></label>
</div>
<div class="col-9">
<input type="file" class ="form-control" name="files" id="uploadBox" />
</div>
</div>
<div class="form-group row">
<div class="col-9 offset-3">
<div class="row">
<div class="col-6">
@if (Model.ProductObj.Product.urunID != 0)
{
<button type="submit" class="btn btn-primary form-control">Düzenle</button>
}
else
{
<button type="submit" onclick="return ValidateInput()" class="btn btn-primary form-control">Oluştur</button>
}
</div>
<div class="col-6">
<a asp-page="./Index" class="btn btn-success form-control">Listeye Dön</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</form>
@section Scripts{
<script>
tinymce.init({
selector: "textarea",
plugins: "lists",
menubar: "file edit format"
});
function ValidateInput() {
if (document.getElementById("uploadBox").value == "") {
swal("Error", "Lütfen ürün resmini seçiniz !", "error")
return false;
}
return true;
}
</script>
}
Admin\Product\Upsert.cshtml.cs:
public class UpsertModel : PageModel
{
private readonly IUnitOfWork _unitOfWork;
private readonly IWebHostEnvironment _hostingEnvironment;
public UpsertModel(IUnitOfWork unitOfWork, IWebHostEnvironment hostingEnvironment)
{
_unitOfWork = unitOfWork;
_hostingEnvironment = hostingEnvironment;
}
[BindProperty]
public ProductVM ProductObj { get; set; }
public IActionResult OnGet(int? id)
{
ProductObj = new ProductVM
{
CategoryList = _unitOfWork.Category.GetCategoryListForDropDown(),
Product = new Model.Product()
};
if(id !=null)
{
ProductObj.Product = _unitOfWork.Product.GetFirstOrDefault(u => u.urunID == id);
if(ProductObj.Product == null)
{
return NotFound();
}
}
return Page();
}
public IActionResult OnPost()
{
string webRootPath = _hostingEnvironment.WebRootPath;
var files = HttpContext.Request.Form.Files;
if(!ModelState.IsValid)
{
return Page();
}
if(ProductObj.Product.urunID == 0)
{
string fileName = Guid.NewGuid().ToString();
var uploads = Path.Combine(webRootPath, @"images\product");
var extension = Path.GetExtension(files[0].FileName);
using(var fileStream=new FileStream(Path.Combine(uploads,fileName+extension),FileMode.Create))
{
files[0].CopyTo(fileStream);
}
ProductObj.Product.resimYolu = @"\images\product\" + fileName + extension;
_unitOfWork.Product.Add(ProductObj.Product);
}
else
{
var objFromDb = _unitOfWork.Product.Get(ProductObj.Product.urunID);
if(files.Count>0)
{
string fileName = Guid.NewGuid().ToString();
var uploads = Path.Combine(webRootPath, @"images\product");
var extension = Path.GetExtension(files[0].FileName);
var imagePath = Path.Combine(webRootPath, objFromDb.resimYolu.TrimStart('\'));
if(System.IO.File.Exists(imagePath))
{
System.IO.File.Delete(imagePath);
}
using (var fileStream = new FileStream(Path.Combine(uploads, fileName + extension), FileMode.Create))
{
files[0].CopyTo(fileStream);
}
ProductObj.Product.resimYolu = @"\images\product\" + fileName + extension;
//_unitOfWork.Product.Add(ProductObj.Product);
}
else
{
ProductObj.Product.resimYolu = objFromDb.resimYolu;
}
_unitOfWork.Product.Update(ProductObj.Product);
}
_unitOfWork.Save();
return RedirectToPage("./Index");
}
}
ProductController.cs:
[Route("api/[controller]")]
[ApiController]
public class ProductController : Controller
{
private readonly IUnitOfWork _unitOfWork;
private readonly IWebHostEnvironment _hostingEnvironment;
public ProductController(IUnitOfWork unitOfWork,IWebHostEnvironment hostingEnvironment)
{
_unitOfWork = unitOfWork;
_hostingEnvironment = hostingEnvironment;
}
[HttpGet]
public IActionResult Get()
{
return Json(new { data = _unitOfWork.Product.GetAll() });
}
[HttpDelete("{id}")]
public IActionResult Delete(int id)
{
try
{
var objFromDb = _unitOfWork.Product.GetFirstOrDefault(u => u.urunID == id);
if (objFromDb == null)
{
return Json(new { success = false, message = "silinme hatası" });
}
var resimYolu = Path.Combine(_hostingEnvironment.WebRootPath, objFromDb.resimYolu.TrimStart('\'));
if (System.IO.File.Exists(resimYolu))
{
System.IO.File.Delete(resimYolu);
}
_unitOfWork.Product.Remove(objFromDb);
_unitOfWork.Save();
}
catch(Exception ex)
{
return Json(new { success = false, message = "silinme hatası" });
}
return Json(new { success = true, message = "Başarıyla Silindi" });
}
}
(请原谅格式化,在手机上)
DropDownListFor 需要一个 select 列表集合
您的第一个参数是您要分配给的 属性,那么您需要将第二个参数作为 SelectList
DropDownListFor(m => m.ProductObj.Product.KategoriID, new SelectList(Model.Products));
您需要将 Products
替换为您自己的产品集合,即您模型中的 属性。
更多信息请参考:DropDownListFor in EditorTemplate not selecting value
我正在尝试开发一个带有剃刀页面的项目。当我说从产品页面创建产品时,我遇到了 IEnumerable 错误。由于我不再知道该怎么做,所以我想在这里分享我的问题。预先感谢您的回答。我还写了一些单词的土耳其语等价物来理解:
urun->产品
urunAdi->产品名称
urunAciklama->产品描述
类别->类别
resimYolu->imagePath
错误前:
错误后:
Admin\Product\Upsert.cshtml:
@page
@model Propeboru.Pages.Admin.Product.UpsertModel
<form method="post" asp-action="Upsert" enctype="multipart/form-data">
<div class="container">
<div class="row px-2 mx-2 border">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
@if (Model.ProductObj.Product.urunID != 0)
{
<input type="hidden" asp-for="ProductObj.Product.urunID" />
}
<div class="col-12 px-3" style="border-bottom:1px solid #325d88">
<h2 class="text-primary">@(Model.ProductObj.Product.urunID != 0 ? "Düzenle" : "Oluştur") Ürünler</h2>
</div>
<div class="col-8 pt-3">
<div class="form-group row">
<div class="col-3">
<label asp-for="ProductObj.Product.urunAdi"></label>
</div>
<div class="col-9">
<input class="form-control" asp-for="ProductObj.Product.urunAdi" />
<span class="text-danger" asp-validation-for="ProductObj.Product.urunAdi"></span>
</div>
</div>
<div class="form-group row">
<div class="col-3">
<label asp-for="ProductObj.Product.urunAciklama"></label>
</div>
<div class="col-9">
<textarea class="form-control" asp-for="ProductObj.Product.urunAciklama" id="txtDesc" style="height:200px;"></textarea>
</div>
</div>
<div class="form-group row">
<div class="col-3">
<label asp-for="ProductObj.Product.kategoriID"></label>
</div>
<div class="col-9">
@Html.DropDownListFor(m => m.ProductObj.Product.kategoriID,
Model.ProductObj.CategoryList ,
"- Lütfen ürünün kategorisini seçiniz !-",
new { @class = "form-control" })
<span class="text-danger" asp-validation-for="ProductObj.Product.kategoriID"></span>
</div>
</div>
<div class="form-group row">
<div class="col-3">
<label asp-for="ProductObj.Product.resimYolu"></label>
</div>
<div class="col-9">
<input type="file" class ="form-control" name="files" id="uploadBox" />
</div>
</div>
<div class="form-group row">
<div class="col-9 offset-3">
<div class="row">
<div class="col-6">
@if (Model.ProductObj.Product.urunID != 0)
{
<button type="submit" class="btn btn-primary form-control">Düzenle</button>
}
else
{
<button type="submit" onclick="return ValidateInput()" class="btn btn-primary form-control">Oluştur</button>
}
</div>
<div class="col-6">
<a asp-page="./Index" class="btn btn-success form-control">Listeye Dön</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</form>
@section Scripts{
<script>
tinymce.init({
selector: "textarea",
plugins: "lists",
menubar: "file edit format"
});
function ValidateInput() {
if (document.getElementById("uploadBox").value == "") {
swal("Error", "Lütfen ürün resmini seçiniz !", "error")
return false;
}
return true;
}
</script>
}
Admin\Product\Upsert.cshtml.cs:
public class UpsertModel : PageModel
{
private readonly IUnitOfWork _unitOfWork;
private readonly IWebHostEnvironment _hostingEnvironment;
public UpsertModel(IUnitOfWork unitOfWork, IWebHostEnvironment hostingEnvironment)
{
_unitOfWork = unitOfWork;
_hostingEnvironment = hostingEnvironment;
}
[BindProperty]
public ProductVM ProductObj { get; set; }
public IActionResult OnGet(int? id)
{
ProductObj = new ProductVM
{
CategoryList = _unitOfWork.Category.GetCategoryListForDropDown(),
Product = new Model.Product()
};
if(id !=null)
{
ProductObj.Product = _unitOfWork.Product.GetFirstOrDefault(u => u.urunID == id);
if(ProductObj.Product == null)
{
return NotFound();
}
}
return Page();
}
public IActionResult OnPost()
{
string webRootPath = _hostingEnvironment.WebRootPath;
var files = HttpContext.Request.Form.Files;
if(!ModelState.IsValid)
{
return Page();
}
if(ProductObj.Product.urunID == 0)
{
string fileName = Guid.NewGuid().ToString();
var uploads = Path.Combine(webRootPath, @"images\product");
var extension = Path.GetExtension(files[0].FileName);
using(var fileStream=new FileStream(Path.Combine(uploads,fileName+extension),FileMode.Create))
{
files[0].CopyTo(fileStream);
}
ProductObj.Product.resimYolu = @"\images\product\" + fileName + extension;
_unitOfWork.Product.Add(ProductObj.Product);
}
else
{
var objFromDb = _unitOfWork.Product.Get(ProductObj.Product.urunID);
if(files.Count>0)
{
string fileName = Guid.NewGuid().ToString();
var uploads = Path.Combine(webRootPath, @"images\product");
var extension = Path.GetExtension(files[0].FileName);
var imagePath = Path.Combine(webRootPath, objFromDb.resimYolu.TrimStart('\'));
if(System.IO.File.Exists(imagePath))
{
System.IO.File.Delete(imagePath);
}
using (var fileStream = new FileStream(Path.Combine(uploads, fileName + extension), FileMode.Create))
{
files[0].CopyTo(fileStream);
}
ProductObj.Product.resimYolu = @"\images\product\" + fileName + extension;
//_unitOfWork.Product.Add(ProductObj.Product);
}
else
{
ProductObj.Product.resimYolu = objFromDb.resimYolu;
}
_unitOfWork.Product.Update(ProductObj.Product);
}
_unitOfWork.Save();
return RedirectToPage("./Index");
}
}
ProductController.cs:
[Route("api/[controller]")]
[ApiController]
public class ProductController : Controller
{
private readonly IUnitOfWork _unitOfWork;
private readonly IWebHostEnvironment _hostingEnvironment;
public ProductController(IUnitOfWork unitOfWork,IWebHostEnvironment hostingEnvironment)
{
_unitOfWork = unitOfWork;
_hostingEnvironment = hostingEnvironment;
}
[HttpGet]
public IActionResult Get()
{
return Json(new { data = _unitOfWork.Product.GetAll() });
}
[HttpDelete("{id}")]
public IActionResult Delete(int id)
{
try
{
var objFromDb = _unitOfWork.Product.GetFirstOrDefault(u => u.urunID == id);
if (objFromDb == null)
{
return Json(new { success = false, message = "silinme hatası" });
}
var resimYolu = Path.Combine(_hostingEnvironment.WebRootPath, objFromDb.resimYolu.TrimStart('\'));
if (System.IO.File.Exists(resimYolu))
{
System.IO.File.Delete(resimYolu);
}
_unitOfWork.Product.Remove(objFromDb);
_unitOfWork.Save();
}
catch(Exception ex)
{
return Json(new { success = false, message = "silinme hatası" });
}
return Json(new { success = true, message = "Başarıyla Silindi" });
}
}
(请原谅格式化,在手机上)
DropDownListFor 需要一个 select 列表集合
您的第一个参数是您要分配给的 属性,那么您需要将第二个参数作为 SelectList
DropDownListFor(m => m.ProductObj.Product.KategoriID, new SelectList(Model.Products));
您需要将 Products
替换为您自己的产品集合,即您模型中的 属性。
更多信息请参考:DropDownListFor in EditorTemplate not selecting value