我有两个类型文件的输入,一个在局部视图中,另一个在主页面
在局部视图中
<input type="file" name="image" id="image" onchange="readURL(this)"/>
在主页
中<input type="file" name="userProfilePic" id="userProfilePic" style="display:none" />
我想要的是当用户在可见文件上传时更改image/file
时,image/file
也应该在主/其他输入上更新。这是我的代码。
function readURL(input) {
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function (e) {
$('#imagePreview').attr('src', e.target.result);
}
reader.readAsDataURL(input.files[0]);
// window['profilePic'] = input.files[0];
$('#userProfilePic').get(0).files[0] = input.files[0];
return false;
}
错误
错误非常奇怪,当我打开我的控制台并检查文件时,它会在某个时间出现,稍后它就不会出现。
在我的控制台窗口中
$('#userProfilePic').get(0).files[0]
File (file object details)
....
(after a second)
$('#userProfilePic').get(0).files[0]
undefined
它不仅仅是第一次发生。有时说,它显示的值为5-6次,然后是第7次它赢得了......
$('#userProfilePic').get(0).files[0]
File (file object details)
....
(after a second)
$('#userProfilePic').get(0).files[0]
File (file object details)
....
(after a second)
$('#userProfilePic').get(0).files[0]
File (file object details)
....
(after a second)
$('#userProfilePic').get(0).files[0]
undefined
我拥有的所有代码,没有其他代码。现在,正如您在代码中看到的,我还将window[profilePic]
设置为文件对象。但是,如果我在控制台窗口中检查它,它总是显示无论如何?这是怎么回事?
问题
我需要提交表单,但是当我这样做时,图像(输入文件)将作为空发送,但有时作为有效文件发送。正如我之前解释的那样,当我检查控制台中的值时,它会第一次显示,或者是一些随机的次数,然后突然它消失了,而我在窗口上设置的变量(window[profilePic]
)总是有那个文件对象
如果有人想知道,用户实际选择文件的原始/可见文件输入始终具有值。
答案 0 :(得分:2)
出于安全原因,您无法执行此操作,所有通过input type="file"
上传的文件都必须由用户手动完成。
但是,只要用户无论如何都要上传图片,您都应该在服务器端脚本中执行所需的所有过程。
有关详细信息,请参阅此帖:
答案 1 :(得分:0)
为什么你尝试对同一个文件使用两个inputfile?
如果您尝试使用输入文件和额外数据在PartialView中创建表单?我在这里回答了一个非常相似的问题:
File upload in MVC when used in bootstrap modal returns null
1)为表单中使用的模型创建一个模型,其中包含表单的所有元素,
2)在局部视图的第一行声明模型
3)将模型作为参数传递给post函数。
4)你使用Partial视图,很可能在不同的页面中使用这个视图,你需要指定控制来处理表格。
代码中的示例:
型号:
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
public class PartialFormModel
{
[Required]
[StringLength(200)]
public string FileName { get; set; }
[StringLength(200)]
public string Title { get; set; }
[StringLength(1000)]
public string Description { get; set; }
public int? Order { get; set; }
[NotMapped]
public HttpPostedFileBase ImageFile { get; set; }
}
PartialVIEW:
@model YOURSPACENAME.Models.PartialFormModel
@using (Html.BeginForm("YourActionName", "YourControllerName", FormMethod.Post, new { @class = "form-horizontal", @role = "form", @enctype="multipart/form-data" }))
{
@Html.AntiForgeryToken()
<div class="form-group">
@Html.LabelFor(model => model.FileName, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.FileName, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.FileName, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.ImageFile, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.TextBoxFor(m => m.ImageFile, new { @class = "form-control", type = "file" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
}
CONTROLLER
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult YourActionName(PartialFormModel obj)
{
if (ModelState.IsValid)
{
//your options
}
return PartialView("_EditSlider");
}
答案 2 :(得分:0)
考虑到:
value
的{{1}}
编程。type="file"
的类型会在某些情况下引发安全性错误
浏览器(旧的IE和Firefox版本)。我实际上并不知道你想要什么。但我叮嘱你创建一个新的<input>
元素,将其类型设置为你想要的类型,比如说input
,并根据你的需要设置它的属性。像这样:
file