I have been following the text book, (It's a great piece of work).
But my problem is my images do not display in the browser. My project requires one database table with the following 4 columns: Id, Name, Description & ImageUrl.
The images upload to the photo folder as instructed in the book. Everything works except I cant work out how to code the statement that updates the class instance to show the image on the page.
Code:
<%@ Page Title="Trainer Profiles" Language="C#" Debug="true" MasterPageFile="~/MasterPages/Frontend.master" AutoEventWireup="true" CodeFile="TrainerProfiles.aspx.cs" Inherits="_TrainerProfiles" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="cpMainContent" Runat="Server">
<asp:ListView ID="ListView1" runat="server" DataSourceID="SqlDataSource1" DataKeyNames="Id" InsertItemPosition="none" OnItemCreated="ListView1_ItemCreated">
<InsertItemTemplate>
<span style="">Name:
<asp:TextBox ID="NameTextBox" Width="200" runat="server" Text='<%# Bind("Name") %>' />
<br />
Background:
<asp:TextBox ID="BackgroundTextBox" TextMode="MultiLine" Width ="200" Height="200" runat="server" Text='<%# Bind("Background") %>' />
<br />
<asp:FileUpload ID="FileUpload2" runat="server" />
<asp:Button ID="InsertButton" runat="server" CommandName="Insert" Text="Insert" />
<asp:Button ID="CancelButton" runat="server" CommandName="Cancel" Text="Clear" CausesValidation="False" />
<br />
<br />
</span>
</InsertItemTemplate>
<ItemTemplate>
<span style="">
Name:
<asp:Label ID="NameLabel" runat="server" Text='<%# Eval("Name") %>' />
<br />
Background:
<asp:Label ID="BackgroundLabel" runat="server" Text='<%# Eval("Background") %>' />
<br />
<asp:Image ID="Image1" runat="server" ImageUrl='<%# Eval("ImageUrl") %>' ImageAlign="Right" Width="180px" AlternateText='<%# Eval("Name") %>'/>
<br />
<asp:Button ID="DeleteButton" runat="server" CommandName="Delete" Text="Delete" CausesValidation="False" />
<br />
<br />
</span>
</ItemTemplate>
<LayoutTemplate>
<div style="" id="itemPlaceholderContainer" runat="server">
<span runat="server" id="itemPlaceholder" />
</div>
<div style="">
</div>
<asp:DataPager ID="ProfilePager" runat="server" PagedControlID="ListView1" PageSize="4">
<Fields>
<asp:NextPreviousPagerField ButtonType="Button" ShowFirstPageButton="True" ShowNextPageButton="False" ShowPreviousPageButton="False" />
<asp:NumericPagerField />
<asp:NextPreviousPagerField ButtonType="Button" ShowLastPageButton="True" ShowNextPageButton="False" ShowPreviousPageButton="False" />
</Fields>
</asp:DataPager>
</LayoutTemplate>
</asp:ListView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:McCabeYourHealthPTConnectionString1 %>" SelectCommand="SELECT * FROM [TrainerProfile]" DeleteCommand="DELETE FROM [TrainerProfile] WHERE [Id] = @original_Id" InsertCommand="INSERT INTO [TrainerProfile] ([Name], [Background], [ImageUrl]) VALUES (@Name, @Background, @ImageUrl)" OldValuesParameterFormatString="original_{0}" UpdateCommand="UPDATE [TrainerProfile] SET [Name] = @Name, [Background] = @Background, [ImageUrl] = @ImageUrl WHERE [Id] = @original_Id" OnInserting="SqlDataSource1_Inserting" OnSelecting="SqlDataSource1_Selecting">
<DeleteParameters>
<asp:Parameter Name="original_Id" Type="Int16" />
</DeleteParameters>
<InsertParameters>
<asp:Parameter Name="Name" Type="String" />
<asp:Parameter Name="Background" Type="String" />
<asp:Parameter Name="ImageUrl" Type="String" />
</InsertParameters>
<UpdateParameters>
<asp:Parameter Name="Name" Type="String" />
<asp:Parameter Name="Background" Type="String" />
<asp:Parameter Name="ImageUrl" Type="String" />
<asp:Parameter Name="original_Id" Type="Int16" />
</UpdateParameters>
</asp:SqlDataSource>
</asp:Content>
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Security;
public partial class _TrainerProfiles : BasePage
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void SqlDataSource1_Inserting(object sender, SqlDataSourceCommandEventArgs e)
{
FileUpload FileUpload1 = (FileUpload)ListView1.InsertItem.FindControl("FileUpload1");
string virtualFolder = "~/Management/ProfilePics/";
string physicalFolder = Server.MapPath(virtualFolder);
string fileName = Guid.NewGuid().ToString();
string extension = System.IO.Path.GetExtension(FileUpload1.FileName);
FileUpload1.SaveAs(System.IO.Path.Combine(physicalFolder, fileName + extension));
}
protected void ListView1_ItemInserting(object sender, ListViewInsertEventArgs e)
{
FileUpload FileUpload1 = (FileUpload)ListView1.InsertItem.FindControl("FileUpload1");
if (!FileUpload1.HasFile || !FileUpload1.FileName.ToLower().EndsWith(".jpg"))
{
CustomValidator cusValImage = (CustomValidator)ListView1.InsertItem.FindControl("cusValImage");
cusValImage.IsValid = false;
e.Cancel = true;
}
}
protected void ListView1_ItemCreated(object sender, ListViewItemEventArgs e)
{
switch (e.Item.ItemType)
{
case ListViewItemType.DataItem:
Button deleteButton = (Button)e.Item.FindControl("DeleteButton");
deleteButton.Visible = Roles.IsUserInRole("Managers");
break;
}
if (Page.User.IsInRole("Managers"))
{
ListView1.InsertItemPosition = InsertItemPosition.LastItem;
}
}
protected void ListView1_SelectedIndexChanged(object sender, EventArgs e)
{
}
protected void SqlDataSource1_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
{
}
}