【问题标题】:How to make html input type choose optional file如何使html输入类型选择可选文件
【发布时间】:2022-01-23 05:30:54
【问题描述】:

我想将 Image 的输入设为可选,但我不知道应该添加什么。 下面是我的 cshtml 文件的主要部分。我尝试了“价值”,但没有帮助。如果用户没有选择图像,则选择 /wwwroot/noiamge/noimage.png 中的图像。

$(".custom-file-input").on("change", function() {
  var fileName = $(this).val().split("\\").pop();
  $(this).siblings(".custom-file-label").addClass("selected").html(fileName);
})
<form>
  <div>
    <div class="form-group">
      <label asp-for="Image" class="control-label"></label>
      <br />
      <div class="custom-file">
        <input asp-for="Image" type="file" class="custom-file-input" id="FLFormFIle" onchange="document.getElementById('FormFilePrv').src = window.URL.createObjectURL(this.files[0])" />
      </div>
      <span asp-validation-for="Image" class="text-danger"></span>
      <br />
    </div>

    <img id="FormFilePrv" src="" style="border:1px; top:20px;margin-left:120px;" />
    <div class="form-group">
      <br />
      <input type="submit" value="Utwórz artykuł" class="btn btn-primary" />
    </div>
  </div>
</form>
        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Create([Bind("ArticleId,ArticleName,ArticlePrice,CategoryId,Image")] Article article, IFormFile image)
        {
            if(image != null)
            {
                string uniqueName = Guid.NewGuid().ToString() + "_" + Path.GetFileName(image.FileName);
                var name = Path.Combine(_hostingEnvironment.WebRootPath + @"\upload", uniqueName);
                image.CopyTo(new FileStream(name, FileMode.Create));
                article.Image = "upload/" + uniqueName;
            }
            if(image == null)
            {
                article.Image = "noimage/NoImage.png";
            }
            Article temparticle = _context.Articles.Where(x => x.ArticleName == article.ArticleName).FirstOrDefault();
            if (temparticle != null)
            {
                return RedirectToAction(nameof(Index));
            }
            _context.Add(article);
            await _context.SaveChangesAsync();
            return RedirectToAction(nameof(Index));
        }

【问题讨论】:

  • 您的 HTML 无效,文件上有两个更改事件
  • @mplungjan 你编辑了我的代码吗?
  • 是的。我做了一个minimal reproducible example
  • 可选是什么意思?
  • @mplungjan 当用户填写表格时,他不必点击“选择文件”来添加图像。这样我就选择了静态图片。

标签: c# html .net asp.net-mvc asp.net-core


【解决方案1】:

这是一个更干净的版本

可选是什么意思?

$(".custom-file-input").on("change", function() {
  var fileName = $(this).val().split("\\").pop();
  document.getElementById('FormFilePrv').src = window.URL.createObjectURL(this.files[0])
  $(this).siblings(".custom-file-label").addClass("selected").html(fileName);
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<form>
  <div>
    <div class="form-group">
      <label asp-for="Image" class="control-label"></label>
      <br />
      <div class="custom-file">
        <input type="file" class="custom-file-input" id="FLFormFIle" />
      </div>
      <span class="text-danger"></span>
      <br />
    </div>

    <img id="FormFilePrv" src="" style="border:1px; top:20px;margin-left:120px;" />
    <div class="form-group">
      <br />
      <input type="submit" value="Utwórz artykuł" class="btn btn-primary" />
    </div>
  </div>
</form>

【讨论】:

  • 谢谢!这很有帮助。您如何编辑此代码,以便如果用户不选择图像,则选择默认图像(/wwwroot/noimage/noimage.png)?要清楚 Image 是 Article 对象的字符串属性。我添加了create方法,该方法与上传图片有关。
猜你喜欢
  • 1970-01-01
  • 2020-01-31
  • 2016-11-30
  • 2014-07-06
  • 2020-03-23
  • 1970-01-01
  • 2014-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多