Я загружаю изображения с помощью элемента управления Fileupload и после загрузки файла при нажатии кнопки «Загрузить» файл будет сохранен в папке на сервере, но перед сохранением в базе данных мне нужно добавить описание изображения вместе с изображение. Но я не знаю, что я получаю некоторую ошибку. Я могу сохранить файл в папке, но когда я сохраню его в базе данных, будет найден только один динамический добавленный элемент управления, а затем он даст Ссылка на объект не установлена в экземпляр объекта Даже если в этом конкретном div имеется несколько элементов управления , Прежде чем перейти в код, я расскажу, какие элементы управления я добавляю после загрузки файла. Я добавляю один элемент управления изображением и текстовое поле для каждого из файлов изображений, которые я загрузил. Когда я загружаю только один файл, он просто войдет в foreach цикл снова после 1-го раза .. Мой код может объяснить это больше.Ошибка в поиске динамического созданного элемента управления
Так что это мой .aspx код:
<form id="ContentPlaceHolder1" runat="server">
<div class="transbox" id="mainbk" runat="server" style="position:absolute; top:0px; left:0px; width: 100%; height: 100%;" >
<asp:FileUpload runat="server" ID="UploadImages" style="background-color:white; position:absolute; font-family:'Palatino Linotype'; font-size:medium; top: 4px; left: 350px; right: 251px;" Width="500px" AllowMultiple="true"/>
<asp:Button runat="server" ID="uploadedFile" style="position:absolute; font-family:'Palatino Linotype'; font-size:medium; top: 4px; left: 870px; width: 112px; height: 29px;" Text="Upload" OnClick="uploadFile_Click" />
<asp:Panel ID="updtpanel" runat="server" CssClass="transbox" style="width:100%;height:100%;left:0px;top:0px;position:absolute" Visible="false">
<asp:Button ID="btnsave" runat="server" UseSubmitBehavior="true" Text="Save" OnClick="btnsave_Click" Font-Bold="true" BackColor="Yellow"></asp:Button>
</asp:Panel>
</div>
</form>
и это мой бэкенд код.
SqlCommand com = new SqlCommand();
SqlConnection con = new SqlConnection();
SqlDataReader reader;
int id = 0;
StringBuilder sb = new StringBuilder();
string filepath = "";
string newpath = "";
int tid = 0;
int count = 0;
int cnt1 = 0;
string textid = "";
Panel dload;
Image img;
TextBox ta;
protected void Page_Load(object sender, EventArgs e)
{
con.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
con.Open();
com = new SqlCommand("select max(slid) from slider", con);
reader = com.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
id = Convert.ToInt32(reader.GetInt32(0));
}
}
con.Close();
com.Dispose();
HtmlGenericControl dh = new HtmlGenericControl("div");
dh.Attributes.Add("class", "head");
dh.InnerText = "Write Description";
updtpanel.Controls.Add(dh);
foreach (HttpPostedFile upld in UploadImages.PostedFiles)
{
createImgPanel();
}
}
protected void uploadFile_Click(object sender, EventArgs e)
{
if (UploadImages.HasFiles)
{
string fileExt = Path.GetExtension(UploadImages.FileName).ToLower();
if (fileExt == ".jpeg" || fileExt == ".png" || fileExt == ".jpg" || fileExt == ".bmp")
{
foreach (HttpPostedFile uploadedFile in UploadImages.PostedFiles)
{
count += 1;
filepath = Server.MapPath("~/Images/Gallery/" + uploadedFile.FileName);
uploadedFile.SaveAs(filepath);
newpath = "../Images/Gallery/" + uploadedFile.FileName;
try
{
Image nimg = dload.FindControl("img" + count) as Image;
nimg.ImageUrl = newpath.ToString();
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
}
}
else
{
Page.ClientScript.RegisterStartupScript(GetType(), "msgbox", "alert('Please Select only Image Files!!');", true);
}
}
else
{
Page.ClientScript.RegisterStartupScript(GetType(), "msgbox", "alert('Please Select a File First!!');", true);
}
}
public void createImgPanel()
{
tid = tid + 1;
textid = "txt" + tid;
ta = new TextBox();
img = new Image();
ta.TextMode = TextBoxMode.MultiLine;
dload = new Panel();
updtpanel.Visible = true;
dload.Attributes.Add("class", "dataload");
//dload.Attributes.Add("runat", "server");
dload.ID = "ind" + tid;
img.CssClass = "loadimg";
img.ID = "img" + tid;
//img.Attributes.Add("runat", "server");
ta.Attributes.Add("class", "txtdes");
ta.ID = textid;
//ta.Attributes.Add("runat", "server");
dload.Controls.Add(img);
dload.Controls.Add(ta);
updtpanel.Controls.Add(dload);
}
protected void btnsave_Click(object sender, EventArgs e)
{
if (Page.IsPostBack)
{
Panel pv = (this.Form.FindControl("mainbk").FindControl("updtpanel")) as Panel;
foreach (Control cd in pv.Controls)
{
cnt1 = cnt1 + 1;
TextBox txt = cd.FindControl("ind" + cnt1).FindControl("txt" + cnt1) as TextBox;****This is where I am getting the above said error****
Image img = cd.FindControl("ind" + cnt1).FindControl("img" + cnt1) as Image;
string str = "";
str = txt.Text;
string iurl = "";
iurl = img.ImageUrl;
id += 1;
string Insert = "Insert into slider (slid,slurl,slalt) values (@id,@IMAGE_PATH,@alter)";
SqlCommand cmd = new SqlCommand(Insert, con);
cmd.Parameters.AddWithValue("@IMAGE_PATH", iurl);
cmd.Parameters.AddWithValue("@id", id);
cmd.Parameters.AddWithValue("@alter", str);
try
{
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
catch (Exception e1)
{
Response.Write(e1.Message);
}
}
updtpanel.Visible = false;
}
}
* Я получаю сообщение об ошибке в последней части кода выше, т.е. сохранить щелчок кнопки события. Для управления текстовым полем я получаю ошибку. Первое изображение будет сохранено успешно, но для других изображений его не обнаружит, даже если они присутствуют в дизайне. *
Я просто хочу знать ли я совершать какие-либо ошибки сохранения нажмите событие или есть какая-то ошибка в целом кодирования себя
Редактировать
Так что это источник HTML после того, как элементы управления отображаются в режиме исполнения:
<div id="mainbk" class="transbox" style="position:absolute; top:0px; left:0px; width: 100%; height: 100%;">
<input type="file" multiple="multiple" name="UploadImages" id="UploadImages" style="width:500px;background-color:white; position:absolute; font-family:'Palatino Linotype'; font-size:medium; top: 4px; left: 350px; right: 251px;">
<input type="submit" name="uploadedFile" value="Upload" id="uploadedFile" style="position:absolute; font-family:'Palatino Linotype'; font-size:medium; top: 4px; left: 870px; width: 112px; height: 29px;">
<div id="updtpanel" class="transbox" style="width:100%;height:100%;left:0px;top:0px;position:absolute">
<input type="submit" name="btnsave" value="Save" id="btnsave" style="background-color:Yellow;font-weight:bold;">
<div class="head">Write Description</div><div id="ind1" class="dataload">
<img id="img1" class="loadimg" runat="server" src="../Images/Gallery/God%201.jpg">
<textarea name="txt1" rows="2" cols="20" id="txt1" class="txtdes"></textarea>
</div><div id="ind2" class="dataload">
<img id="img2" class="loadimg" runat="server" src="../Images/Gallery/God%202.jpg">
<textarea name="txt2" rows="2" cols="20" id="txt2" class="txtdes"></textarea>
</div><div id="ind3" class="dataload">
<img id="img3" class="loadimg" runat="server" src="../Images/Gallery/God%203.jpg">
<textarea name="txt3" rows="2" cols="20" id="txt3" class="txtdes"></textarea>
</div>
</div>
</div>
Эдите d
KI просто пошел вглубь, за исключением я получаю ... Его говоря ..
'((System.Web.UI.HtmlControls.HtmlContainerControl) (DV)). InnerHtml' кинул исключение типа «System.Web.HttpException»
Что это значит на самом деле. В нем также говорится, что контроль не является буквальным. Что это значит. Почему это не удается найти элемент управления, который у меня есть? прилагается .. Помогите мне пожалуйста.
FindControl не только осуществляет поиск на одном уровне, но и все иерархии управления. возможно, это не причина ошибки, но это помогает понять ситуацию. также вы можете проверить Request.Form.Keys и посмотреть, есть ли идентификатор текстового поля. – TakeMeAsAGuest
@TakeMeAsAGuest .. Скажем, если у меня есть div, и я включаю динамически добавленные текстовые поля и изображения в этом div. Теперь, если я использую Findcontrols и найду эти идентификаторы, тогда, очевидно, я должен получить право. Есть элементы управления с этим правом когда я вижу это во время выполнения. Но findcontrol не найдет его ...:(Пожалуйста, дайте мне решение, если u knw ... –
@TakeMeAsAGuest .. Невозможно проверить изображения с помощью Request.Form.Keys .. cs Я могу найти текстовые поля, но не изображения ... :( –