3

我在我的 C# 项目中使用 MVC 4 框架。我创建了一个页面,在我的数据库(路径)中添加广告,在文件夹中添加实际图像。

该代码有效,但我想建立一个安全机制,防止页面发布空输入文件(图像选择器)。我发现 HTML 5 支持“必需”属性,但仍然存在一些问题。

当我按下提交按钮时(当没有选择图像时),它会标记该字段,但后面的代码(UploadController 中的 UploadAd 方法)仍然会被触发。这是什么原因造成的?

以下图像和代码可以使其更易于理解:

查看代码: http: //pastebin.com/s9eWn4zW

控制器代码+站点验证: http: //oi47.tinypic.com/23leeef.jpg

4

4 回答 4

1

尝试这个 :

<div class="editor-field">
     <input type="file" name="image" id="uploadfile" required/>
</div>

<script type="text/javascript">
$(document).ready(function() {
    $('#upload').bind("click",function() 
    { 
        var imgVal = $('#uploadfile').val(); 
        if(imgVal=='') 
        { 
            alert("empty input file"); 
            return false; 
        } 
    }); 
});
</script> 
于 2020-07-21T08:12:07.870 回答
0

广告创建页面使用以下形式:

@using (Html.BeginForm("UploadAd", "Upload", FormMethod.Post, new { enctype = "multipart/form-data", id = "adForm" }))
{
...
  <div class="editor-label">
            <p>Photo</p>
        </div>
        <div class="editor-field">
            <input type="file" id="files" name="files[]" multiple required/>
        </div>
}

添加以下脚本使其工作:

<script>
    function manualValidate(ev) {
        if (ev.target.checkValidity()) {
            return true;
        } else { return false;}


    }
    $("#adForm").bind("submit", manualValidate);
</script>
于 2013-04-12T19:05:33.803 回答
0

您可以将required属性添加到客户端并在用户单击提交时对其进行验证。此外,您还必须在服务器端进行验证。保存前检查文件是否存在

foreach(var postedFile in Request.Files)
{
   if (postedFile!= null && postedFile.ContentLength > 0) 
   {
      // good ! Save now
   }
}
于 2013-04-11T17:42:48.847 回答
0

我建议使用一个额外的客户端属性,FileName该属性将在您的Model课程中发生,如下所示:

[Required(AllowEmptyStrings = false, ErrorMessage = "You must add a file.")] 
public string FileName { get; set; }

<div class="editor-label">File</div>
<div class="editor-field">
    <input type="file" //yourCustomAttributes />
    <input type="text" name="FileName" readonly />
    @Html.ValidationMessageFor(model => model.FileName)
</div>

添加 javascript 行也编辑FileName textbox为选择要上传的文件。这样,client-side controls如果未选择任何文件,将发生并阻止将表单提交给您的控制器。

于 2013-04-11T17:59:59.853 回答