I am trying to show a image from a server's folder, image name is specified by Query string, query gives te userid and then a image from folder with userid is rerieved,
Now i gettiing nothing in imageViewer, it is always blank .
this the code behind i am using :-
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Request.QueryString("UserID") <> "" Then
Dim UserID As String = Request.QueryString("UserID").ToString()
Dim img As Image = Me.FindControl("ImageUser")
img.ImageUrl = Server.MapPath("~\UserImages\" + UserID + ".png")
End If
End Sub
I also tried this code :-
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Request.QueryString("UserID") <> "" Then
Dim UserID As String = Request.QueryString("UserID").ToString()
UserImg.ImageUrl = Server.MapPath("~\UserImages\" + UserID + ".png")
End If
and this is my designer file :-
<%# Page Language="vb" AutoEventWireup="false" CodeBehind="UserPhoto.aspx.vb" Inherits="IslamicPartner_web.UserPhoto" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Image ID="ImageUser" runat="server" Height="489px" Width="703px" />
</div>
</form>
Where is the problem ?
Actually i want to view this in WebView in IOS app for user image , like Facebook
End Sub
If you look at the rendered HTML in a browser (usually via "View Source" or similar), you will see that you are sending a URL of something like "C:\Inetpub\websitename\UserImages\userid.png". This is not what you want as the browser does not have access to your web server's disks. The problem is that you are using Server.MapPath inappropriately.
What you want instead is something more like:
If System.IO.File.Exists(Server.MapPath("~\UserImages\" & UserID & ".png")) Then
img.ImageUrl = "\UserImages\" & UserID & ".png")
Else
img.ImageUrl = "\UserImages\UserUnknown.png"
End If
Related
I want to ask about asp.net
Best regards for everyone of you to answer and solve my question :)
The Case are when I'm Login, I want call the image Logo and put it in according to username Login but I put the image on folder inside my web project. I named the image Logo according to every username that registered in my database.
Thanks for your answer :)
I assume you are using webforms. You can add an asp:Image control in you webpage.
<%# Page Title="MyPage" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="MyPage.aspx.cs" Inherits="WebForms.MyPage" %>
<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
<!-- This is the element that will display your user image -->
<asp:Image ID="LogoPicture" runat="server"/>
</asp:Content>
Then inside the MyPage.aspx.cs file you can set the URL for the picture.
C#
public partial class MyPage : Page
{
protected void Page_Load(object sender, EventArgs e)
{
//Get the username for current user however you will
var username = User.Identity.Name;
//Create the path for your logo picture
string logoPath = string.Concat(ResolveUrl("~/Content/Logos/"), username, ".JPG");
//Set the picture control image url accordingly
LogoPicture.ImageUrl = logoPath;
}
}
VB
Public Class MyPage
Inherits Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
If (User IsNot Nothing AndAlso User.Identity IsNot Nothing) Then
' Get the username
Dim username As String = User.Identity.Name
' Create path for the images for example this could be something like http://localhost/MyApp/Content/Logos/JohnCena.JPG
Dim logoPath As String = String.Concat(ResolveUrl("~/Image"), username, ".JPG")
' Set the picture control image url accordingly
LogoPicture.ImageUrl = logoPath
End If
End Sub
End Class
Despite the firing of the method associated with a form and button click, my fileupload will not pass a value to a string, am I doing something obviously wrong (or just wrong in general)?
Do I need to attach a handler to the fileupload
Here is some sample source, note, it is the only code in the project, I have not made any definitions to the button or fileupload anywhere else:
Public Class WebForm1
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
End Sub
Protected Sub Button_Click()
Dim FileUpload1 As New FileUpload()
Dim X As String = FileUpload1.FileName
Response.Write(X)
End Sub
End Class
and the form:
<%# Page Language="vb" AutoEventWireup="false" CodeBehind="WebForm1.aspx.vb" Inherits="Test.WebForm1" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="Button1" runat="server" OnClick="Button_Click" text="Submit"/>
<%-- <input type="file" />--%>
</form>
</body>
</html>
After trying FileUpload.HasFile, it appears as though not only can I not get the file name (described to me in the answer below), but the FileUpload.HasFile is nothing when a file is associated with it as well, is there any reason for this?
Protected Sub Button_Click()
Dim FileUpload1 As New FileUpload()
'Dim X As String = FileUpload1.FileName
'Response.Write(X)
If (FileUpload1.HasFile) Then
' Do Something
' SaveFile(FileUpload1.PostedFile)
Else
End If
End Sub
If you are looking for the path of the uploaded file in the client's machine, that is not allowed for security reasons.
However you should be able to get just the file name using the FileName property.
I check the file name in my applications when i want to test the to see the filetype that is uploaded.
I do not think the following line is required in your Protected Sub Button_Click() function:
Dim FileUpload1 As New FileUpload()
That must be creating a new instance causing it to show you an empty File Name.
If you just need the file name and not the entire path you could try the above.
Edit: Just saw the edit to your questions. The line I asked you to remove may be causing HasFile property to be empty as well.
You can not pass/assign name asp:FileUpload, as it is converted to input type file it is not allowed due to security reason. As it could breach the security of client machine that is browsing the website. The only possibility to assign it a value is through user selection that is browsing and assigning the file by user from client (browser)
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.fileupload.saveas.aspx
You can use FileUpload.SaveAs method to save the selected file.
FileUpload1.SaveAs(savePath);
I have a usercontrol which is on a webpage and that webpage is shown in a iFrame.
Form source:
<%# Page Language="vb" AutoEventWireup="false" CodeBehind="FileUploadForm.aspx.vb"
Inherits="IST.FileUploadForm" %>
<%# Register Src="myFileUpload.ascx" TagName="myFileUpload" TagPrefix="uc1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:PlaceHolder ID="ph1" runat="server"></asp:PlaceHolder>
</div>
</form>
</body>
</html>
Code behind:
Imports System.IO
Public Class FileUploadForm
Inherits System.Web.UI.Page
Private WithEvents myFileUpload1 As myFileUpload
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim myUploadLocation As String
myUploadLocation = Request.QueryString("loc")
If myUploadLocation = Nothing Then
myUploadLocation = Server.MapPath("~\temp")
End If
Dim allowed As String
allowed = Request.QueryString("accepts")
If allowed = Nothing Then
allowed = ""
End If
myFileUpload1 = CType(Me.LoadControl("myFileUpload.ascx"), myFileUpload)
myFileUpload1.ID = "fuOfferte"
myFileUpload1.AllowedFiles = allowed
myFileUpload1.FileLabelText = "File"
myFileUpload1.NotAllowedText = "This file extention is not allowed."
myFileUpload1.UploadButtonText = "Upload file"
myFileUpload1.UploadLocation = myUploadLocation
ph1.Controls.Add(myFileUpload1)
End Sub
Private Sub myFileUpload1_FileUploaded(file As String) Handles myFileUpload1.FileUploaded
Session("UploadedFileName") = file
End Sub
End Class
Behind code in main page:
pnMNCfile = New Panel
pnMNCfile.ID = "pnMNCfile"
pnMNCfile.Style("position") = "absolute"
pnMNCfile.Style("left") = "45px"
pnMNCfile.Style("top") = "30px"
pnMNCfile.Style("width") = "540px"
If Request.Browser.Browser.ToLower = "ie" = False Or (Request.Browser.Browser.ToLower = "ie" = True And CInt(Request.Browser.Version.Substring(0, 1)) > 8) Then
pnMNCfile.Style("height") = "80px"
Else
pnMNCfile.Style("height") = "87px"
End If
pnMNCfile.Style("z-index") = "999"
pnMNCfile.BorderStyle = BorderStyle.None
pnMNCfile.BackColor = Drawing.Color.LightGray
pnMNCfile.BorderWidth = 1
pnMNCfile.Attributes.Add("OnMouseOut", "BalloonPopupControlBehavior.hidePopup();")
pnMNC3.Controls.Add(pnMNCfile)
Dim lit As New Literal
lit.Text = "<IFRAME id=""frMNCfileUpload"" frameborder=""0"" scrolling=""auto"" allowtransparency=""true"" runat=""server"" width=""100%"" height=""100%"" src=""FileUploadForm.aspx?loc=" + CStr(Session("userfolder")) + "&accepts=xls_xlsx_doc_docx""></IFRAME>"
pnMNCfile.Controls.Clear()
pnMNCfile.Controls.Add(lit)
The problem is that when the page loads in IE9 you see the iframe very shortly (less than 0.5 sec). In Chrome it is visible without any problem.
When I do a right mouseclick in the iframe area and do a refresh, the content is visible.
I also tried with a border around the iframe. When it is not visible, also the border is not visible. In chrome you can then see the border too.
What is happening here?
Is this a bug in IE or (more likely) am I doing something wrong?
Dirty fix would be to add a auto refresh to the webpage with the usercontrol.
any thoughts?
rg,
Eric
I had the same issue with IE9 for various reasons and works with Chrome.
1. Configure Asp.net to use a cookieless session state. This might help...
<sessionState cookieless="true" mode="InProc"></sessionState>
</system.web>
</configuration>
or
2.
or try this too:
Response.Cache.SetCacheability(HttpCacheability.NoCache);
example:
<%# Page Language="C#" AutoEventWireup="true" CodeBehind="GeneralLedgerCodeListingCustomForm.aspx.cs" Inherits="xyz.GeneralLedgerCodeListingCustomForm" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%
Response.Cache.SetCacheability(HttpCacheability.NoCache);
%>
I'm new to ASP.NET but have quite a few successful test pages going now which I am using to slowly build up a new website and data application... hence my many questions on here.
Anyway, in my efforts to understand JSON, I have a test page trying to get the data out, but for some reason the script works fine when it's all one page, but not as code behind.
My ASPX file is:
<%# Page Language="VB" AutoEventWireup="false" CodeFile="json.aspx.vb" Inherits="jsonPage" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form runat="server">
Output:
<div id="readOut" runat="server"></div>
</form>
</body>
</html>
Code behind:
Imports Jayrock.Json.JsonTextWriter, Jayrock.Json, Jayrock.Json.Conversion, System.Net
Partial Class jsonPage
Inherits System.Web.UI.Page
Sub Page_Load(Sender As Object, E As EventArgs)
Dim cMessage As String = "{""ID"": 8291, ""Item"": ""Epiphone Les Paul Tribute Plus Outfit"", ""Main Image"": ""8291-113247"", ""Colour"": ""Vintage Sunburst"", ""Option"": ""none"", ""Price"": 549.0}"
Dim objResponse As JsonObject = CType(JsonConvert.Import(cMessage), JsonObject)
readOut.InnerText = "Item name is: " & objResponse("Item")
End Sub
End Class
As I say, this is just a test code to try to get to grips with JSON, the text "Item name is:" followed by the result of the JSON parsing, should be posted into the div id="readOut" in the main ASPX page, but it won't... the strange thing is that it works is I take out the Page_Load sub and run the code in the head of the ASPX file.
I've tried comparing this to other files I have that are working and can find no obvious reason why this is happening.
I think this may be your problem. I suspect you weren't even able to hit that code with a breakpoint?
Page_Load(Sender As Object, E As EventArgs)
Should have a handles clause.
Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
When creating dynamic ajax controls you may experience a pre-render issue on postbacks. You are supposed to re-create the controls on postback, however if there are very many of them performance gets very slow between each postback. i.e. clicking on a combobox, it may take several seconds. So what I did was group the controls in panels, store the panels in a collection, then re-call the panels on Postback. This actually works great if the controls inside the panel are standard html controls (textbox, dropdowlist, etc.). But...doesn't work well with ajax controls...yet.
I have included a sample below. Uncomment/Comment the code to test it. If anyone has a good idea how to make this work with ajax controls that would be great.
<%# Page Language="vb" AutoEventWireup="false" CodeBehind="WebForm1.aspx.vb" Inherits="PreRenderAjax.WebForm1" %>
<%# Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
</asp:ToolkitScriptManager>
<div>
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
</div>
</form>
</body>
</html>
Public Class WebForm1
Inherits System.Web.UI.Page
Shared panellist As New List(Of Panel)
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If IsPostBack Then
'This is for reloading panels. Works with dropdownlist, but not ajax combobox
For Each pn As Panel In panellist
PlaceHolder1.Controls.Add(pn)
Next
'This for re-creating all the controls again. Not very efficient for ajax controls though.
'CreateInterface()
Else
CreateInterface()
End If
End Sub
Protected Overrides Sub CreateChildControls()
MyBase.CreateChildControls()
End Sub
Protected Overrides Sub OnInit(ByVal e As System.EventArgs)
MyBase.OnInit(e)
EnsureChildControls()
End Sub
Private Sub CreateInterface()
Dim pn As Panel
pn = CreatePanel("panel1")
CreateControls(pn, 5)
pn = CreatePanel("panel2")
CreateControls(pn, 5)
pn = CreatePanel("panel3")
CreateControls(pn, 5)
pn = CreatePanel("panel4")
CreateControls(pn, 5)
End Sub
Private Function CreatePanel(ByVal name As String) As Panel
Dim pn As New Panel
pn.ID = name
pn.Width = 250
pn.BorderStyle = BorderStyle.Solid
pn.BorderColor = Drawing.Color.Blue
pn.Style.Add("margin", "5px")
pn.Style.Add("padding", "5px")
PlaceHolder1.Controls.Add(pn)
panellist.Add(pn)
CreatePanel = pn
End Function
Private Sub CreateControls(ByVal pn As Panel, ByVal howmany As Integer)
Dim cbo As AjaxControlToolkit.ComboBox
'Dim cbo As DropDownList
For i As Integer = 0 To howmany - 1
cbo = New AjaxControlToolkit.ComboBox
'cbo = New DropDownList
cbo.ID = pn.ID & "_cbo" & i
cbo.Width = 200
cbo.Items.Add("Item 1")
cbo.Items.Add("Item 2")
cbo.Items.Add("Item 3")
cbo.Items.Add("Item 4")
cbo.Items.Add("Item 5")
cbo.Style.Add("margin", "3px")
cbo.AutoPostBack = True
pn.Controls.Add(cbo)
Next
End Sub
End Class
I just did a test to see if postback slowness was from the ajax controls themselves or recreation. Well come to find out its tha actual ajax controls themselves. I created a blank page, put 40 ajax combobox's on (adding a couple items to each), turn on postcack. When I started the page and clicked an item it took about 3 or 4 seconds to complete the postback.
Did the same thing with dropdownlist and it works great. too bad you cant use it like a combobox.