2015-12-02 44 views
0

在服務器端,我創建了一個文本,其文本設置爲輸入類型文件元素,其屬性爲runat = 'server',模式設置爲passThrough並將其附加到div。文字和輸入元素都有它自己的唯一ID。我的問題是試圖從div標籤中獲取輸入元素。我能夠以編程方式獲取文字,但文字不包含任何控件,文本值具有我需要的輸入元素。我試圖尋找它自己的輸入元素,並保持null。我檢查過這個頁面,我看到輸入元素爲runat='server',它是,但我無法得到它。我需要能夠得到這個輸入元素才能上傳它的文件。如何從文字中獲取輸入元素

這是我到目前爲止已經試過:

客戶端:

<div runat="server" id="docRequeridosMainDiv" style="display: table; 
width: 60%; text-align: right"> 

      <%-- Control set on server side --%> 

</div> 

服務器端:(此測試在頁面加載事件)

//Attach inivisible input type file 
uploadLit.Text += string.Format(@"<div><input type='file' id='{0}File' runat = 'server' style='display: none;' 
    onchange='" + docsRequeridos.ElementAt(i).Nombre + @"FileSelected()' /></div>", lbl.Text); 

uploadLit.ID = lbl.Text + "FileLit"; 

docRequeridosMainDiv.Controls.Add(uploadLit); 

//var lit = (Literal)docRequeridosMainDiv.FindControl(uploadLit.ID); 

var lit = (HtmlGenericControl)docRequeridosMainDiv.FindControl(lbl.Text +"File"); 

忽略事件附加到輸入,工作。

我已經調試了註釋​​3210並且控件集合有0但文本有輸入。第二個亮起的是返回空值。

試圖在點擊事件中使用相同的Findcontrol行來獲取它,結果仍然相同。沒有控制的文字。

以防萬一你想知道爲什麼輸入是display:none因爲我正在做一個自定義文件上傳,但這並不重要,因爲所有其他功能的作品,唯一不行的是這一個。

+0

'FindControl()'將只能找到服務器控件。您添加該文件上傳器的方式不是服務器控件。你應該使用'HtmlInputFile'來替代(_without_這個文字)。 – mshsayem

+0

你是什麼意思?你可以詳細說明一下嗎?或者給我一個例子 – Jcorretjer

+0

將runat = server這個單詞添加到你的文字中並不會讓它成爲一個服務器控件。您只是將這些單詞寫入頁面,服務器不會處理它們以保持任何意義 –

回答

1

FindControl()只能找到服務器控件。將html控件(以runat="server"作爲字符串)添加到Literal不會使這些控件服務器端。但是你可以用HtmlInputFile來達到同樣的,就像這樣:

var fileInput = new HtmlFileInput 
{ 
    ID = lbl.Text + "File" 
}; 

fileInput.Attributes["onchange"] = docsRequeridos.ElementAt(i).Nombre + "FileSelected()"; 
fileInput.Attributes["style"] = "display:none"; 

docRequeridosMainDiv.Controls.Add(fileInput); 

現在,你可以找到這種控制,如:

var foundFileInput = docRequeridosMainDiv.FindControl(lbl.Text +"File") as HtmlFileInput; 

如果你想換這個文件輸入與div,你需要再製作一個HtmlGenericControl並將其添加fileInput;像這樣:

var myDiv = new HtmlGenericControl("div") 
{ 
    ID = "FileUploadContainer" 
}; 

myDiv.Controls.Add(fileInput); 
docRequeridosMainDiv.Controls.Add(myDiv); // Add myDiv instead of fileInput 

這將產生正是你想要的HTML,只是程序(不Literal字符串),並控制現在服務器端是。

+0

應用您的邏輯工作,我設法檢索輸入控件。但是,我有一個新問題。在我在這個輸入上選擇一個文件後,我正在檢索htmlinput控件,但是即使選中了它,發佈的文件也是null。我可以在自己的頁面上看到我選擇的文件名。 – Jcorretjer

+0

我會將此標記爲答案,因爲我改變了所有內容並恢復爲使用fileupload,但接近解決此問題。 – Jcorretjer