关于回发后为空的ASP.NET fileuploader,我遇到了问题。我有一个文件上载控件,一个文本框控件和一个按钮控件。
当我单击按钮时,它会检查是否填充了文本框,是否执行了操作,如果不是则会显示错误消息并保留在页面上。但是,当我按下按钮并且文本框为空时,按钮回发并且fileuploader为空,用户必须再次选择该文件。所以:用户选择文件>该文件位于fileuploader>用户按下按钮>弹出错误消息>文件上传器在回发后丢失文件。
当用户选择文件但尚未点击按钮时(koala.jpg)
按下按钮时,文件消失(未选择文件)
如何在回发后将文件保留在fileuploader中,或者如果文本框为空,可以告诉按钮不回发?
修改
请注意,我简化了问题,并且第一篇文章的内容只是为了让我的问题更清晰。
页面加载:
protected void Page_Load(object sender, EventArgs e)
{
//First check if User is logged in
if (Session["User"] == null)
{
Response.Redirect(GetRouteUrl("Login", null));
}
TicketsBLL objTicketsBll = new TicketsBLL();
var cat = objTicketsBll.getAllCategories();
ddlCategory.DataTextField = "name";
ddlCategory.DataValueField = "id";
ddlCategory.DataSource = cat;
ddlCategory.DataBind();
}
按钮点击:
//check if everthing is filled :
errorContent.Visible = false;
errorSubject.Visible = false;
if (txtSubject.Text == "" || txtSubject.Text == null || txtContent.Text == null || txtContent.Text == "")
{
if (txtSubject.Text == "" || txtSubject.Text == null)
{
errorSubject.Visible = true;
}
if(txtContent.Text == null || txtContent.Text == ""){
errorContent.Visible = true;
}
}
else { //Do something after this
errorSubject& errorContent是隐藏的div,显示为错误
答案 0 :(得分:10)
无法设置文件输入的值。这是一个浏览器安全功能,与password
字段相同,唯一的区别在于您可以使用JavaScript设置值的password
字段。
但是,如果输入file
,则无法设置值。
解决方案是阻止回发,在发回之前使用JavaScript
检查值。
答案 1 :(得分:1)
正如Phill指出的那样,您无法从后面的代码或从表单值重新填充更新此控件。
如果您依靠自动回发在表单上的其他位置更改数据,则需要处理初始FileUpload并创建一个假占位符,指示要上载的文件名。
更简单的解决方案可能是将需要AutoPostBack的其他控件包装在UpdatePanel中,以便它们可以独立于文件上载控件进行回发。