首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >文件控件未在编辑页面中初始化-剃刀页面

文件控件未在编辑页面中初始化-剃刀页面
EN

Stack Overflow用户
提问于 2018-06-24 10:00:38
回答 1查看 142关注 0票数 0

我使用asp.net核心剃刀页面来创建我的应用程序,在我的create页面中,我有两个文件控件,一个用于上传图标图像,另一个用于上传详细图像。但是当我点击编辑按钮时,除了两个文件控件之外,所有的字段都被初始化了。请检查我的代码。有人能帮上忙吗?

在我的剃刀页面上:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div class="row">
                <div class="col-md-6">
                    <div class="form-group">
                        <label asp-for="Product.Icon" class="control-label"></label>
                        <input asp-for="@Model.Icon" type="file" />
                        <span asp-validation-for="Product.Icon" class="text-danger"></span>
                    </div>
                </div>
                <div class="col-md-6">
                    <div class="form-group">
                        <label class="control-label”>Detail Images(support multi-uploading):</label>
                        <input type="file" id="fUpload" name="files" multiple />
                    </div>
                </div>
            </div>

在我的页面模型中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  public async Task<IActionResult> OnGetAsync(int? id)
        {
            if (id == null)
            {
                return NotFound();
            }
            Product = await _context.Products
                .Include(p => p.Shop).SingleOrDefaultAsync(m => m.ID == id);
            if (Product == null)
            {
                return NotFound();
            }
            ViewData["Shop"] = new SelectList(_context.Shops, "ID", "Name");
            return Page();
        }
        public async Task<IActionResult> OnPostAsync(List<IFormFile> files)
        {
            if (!ModelState.IsValid)
            {
                return Page();
            }
            var uploads = Path.Combine(hostingEnvironment.WebRootPath, "uploads");
            if (!Directory.Exists(uploads))
            {
                Directory.CreateDirectory(uploads);
            }
            if (this.Icon != null)
            {
                var fileName = GetUniqueName(this.Icon.FileName);
                var filePath = Path.Combine(uploads, fileName);
                this.Icon.CopyTo(new FileStream(filePath, FileMode.Create));
                this.Product.Icon = fileName;
            }
            if (files != null && files.Count > 0)
            {
                foreach (IFormFile item in files)
                {
                    if (item.Length > 0)
                    {
                        var fn = GetUniqueName(item.FileName);
                        var fp = Path.Combine(uploads, fn);
                        item.CopyTo(new FileStream(fp, FileMode.Create));
                        this.Product.ProductImages = this.Product.ProductImages + fn + "^";
                    }
                }
            }
            _context.Attach(Product).State = EntityState.Modified;
            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!ProductExists(Product.ID))
                {
                    return NotFound();
                }
                else
                {
                    throw;
                }
            }
            return RedirectToPage("./Index");
        }
EN

回答 1

Stack Overflow用户

发布于 2018-07-02 10:07:34

您提供的代码中缺少页面中最重要的部分-- <form>标记。要使文件上载起作用,必须将该方法指定为post,并且还必须提供一个值设置为multipart/form-dataenctype属性

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<form method="post" enctype="multipart/form-data">
...

参考:https://www.learnrazorpages.com/razor-pages/forms/file-upload

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51008817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文