Νεότερα... από το Kit Saga... (δεν ασχολήθηκα με τα ελληνικά σήμερις... από αύριο πάλι!)
Το νέο θέμα που προέκυψε είναι ότι από το http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/extendclubwebsitesk.asp δηλ. το Εxtending the Club Web Site Starter Kit, λείπει o κώδικας που κάνει upload τα αρχεία, και πιο συγκεκριμένα ο κώδικας του Button2_Click event (shown shortly), ο οποίος δεν φαίνεται πουθενά στο συγκεκριμένο αρχείο. Και επειδή και άλλοι είχαν το συγκεκριμένο πρόβλημα... βεβαίως... βεβαίως... (δείτε ref. στο τέλος) με τα πολλά... κατάφερα (και αυτό δεν το πιστεύω ούτε εγώ τώρα που το γράφω!) να βρώ μια άκρη (με ερωτήσεις και bugs βεβαίως... βεβαίως..):
public partial class admin : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
SqlDataSource1.Insert();
TextBox1.Text = "";
CheckBox1.Checked = false;
}
protected void Button2_Click(object sender, EventArgs e)
{
Boolean fileOK = false;
String path = Server.MapPath("~/Uploads/");
if (FileUpload1.HasFile)
{
String fileExtension = System.IO.Path.GetExtension(FileUpload1.FileName).ToLower();
String[] allowedExtensions = {".gif", ".png", ".jpeg", ".jpg"};
for (int i = 0; i < allowedExtensions.Length; i++)
{
if (fileExtension == allowedExtensions
)
{
fileOK = true;
}
}
}
if (fileOK)
{
try
{
FileUpload1.PostedFile.SaveAs(path
+ FileUpload1.FileName);
Label1.Text = "File uploaded!";
}
catch (Exception ex)
{
Label1.Text = "File could not be uploaded.";
}
}
else
{
Label1.Text = "Cannot accept files of this type.";
}
SqlDataSource2.InsertParameters.Add("DocumentName", FileUpload1.FileName.ToString());
SqlDataSource2.InsertParameters.Add("DateInput", TypeCode.DateTime, DateTime.Now.ToString());
SqlDataSource2.Insert();
TextBox2.Text = "";
}
}
και aspx:
<%@ Page Language="C#" MasterPageFile="~/Default.master" AutoEventWireup="true" CodeFile="admin.aspx.cs" Inherits="admin" Title="Untitled Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<div class="fullwidth">
<table>
<tr>
<a href="#categories">Categories</td>
<a href="#file">Upload files</td>
</tr>
</table>
</div>
<div class="fullwidth">
</a id="categories">Categories Management</h1>
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True"
AutoGenerateColumns="False" DataKeyNames="CategoryID" DataSourceID="SqlDataSource1">
<Columns>
<asp:BoundField DataField="CategoryID" HeaderText="CategoryID" InsertVisible="False"
ReadOnly="True" SortExpression="CategoryID" />
<asp:BoundField DataField="CategoryName" HeaderText="CategoryName" SortExpression="CategoryName" />
<asp:CheckBoxField DataField="IsPublic" HeaderText="IsPublic" SortExpression="IsPublic" />
<asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />
</Columns>
</asp:GridView>
<br />
<br />
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConflictDetection="CompareAllValues"
ConnectionString="<%$ ConnectionStrings:ClubSiteDB %>" DeleteCommand="DELETE FROM [DocumentCategories] WHERE [CategoryID] = @original_CategoryID AND [CategoryName] = @original_CategoryName AND [IsPublic] = @original_IsPublic"
InsertCommand="INSERT INTO [DocumentCategories] ([CategoryName], [IsPublic]) VALUES (@CategoryName, @IsPublic)"
OldValuesParameterFormatString="original_{0}" SelectCommand="SELECT * FROM [DocumentCategories]"
UpdateCommand="UPDATE [DocumentCategories] SET [CategoryName] = @CategoryName, [IsPublic] = @IsPublic WHERE [CategoryID] = @original_CategoryID AND [CategoryName] = @original_CategoryName AND [IsPublic] = @original_IsPublic">
<DeleteParameters>
<asp:Parameter Name="original_CategoryID" Type="Int32" />
<asp:Parameter Name="original_CategoryName" Type="String" />
<asp:Parameter Name="original_IsPublic" Type="Boolean" />
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="CategoryName" Type="String" />
<asp:Parameter Name="IsPublic" Type="Boolean" />
<asp:Parameter Name="original_CategoryID" Type="Int32" />
<asp:Parameter Name="original_CategoryName" Type="String" />
<asp:Parameter Name="original_IsPublic" Type="Boolean" />
</UpdateParameters>
<InsertParameters>
<asp:ControlParameter Name="CategoryName" Type="String" ControlID="TextBox1" />
<asp:ControlParameter Name="IsPublic" Type="Boolean" ControlID="CheckBox1" />
</InsertParameters>
</asp:SqlDataSource>
<br />
</div>
<div class="fullwidth">
<h2>Add a Category</h2>
<p>Category Name:<br />
<br ID="TextBox1" runat="server" />
<br ID="CheckBox1" runat="server" Text="Public?" />
<asp:Button ID="Button1" runat="server" Text="Add Category" OnClick="Button1_Click" />
</p>
</div>
<div class="fullwidth">
</a id="file">Files Management</h1>
<asp:GridView ID="GridView2" runat="server" AllowPaging="True" AllowSorting="True"
AutoGenerateColumns="False" DataKeyNames="DocumentID" DataSourceID="SqlDataSource2">
<Columns>
<asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />
<asp:BoundField DataField="DocumentID" HeaderText="DocumentID" ReadOnly="True" SortExpression="DocumentID" />
<asp:BoundField DataField="DocumentName" HeaderText="DocumentName" SortExpression="DocumentName" ReadOnly="True" />
<asp:BoundField DataField="DateInput" HeaderText="DateInput" SortExpression="DateInput" />
<asp:BoundField DataField="Comments" HeaderText="Comments" SortExpression="Comments" />
<asp:BoundField DataField="DocumentCategory" HeaderText="DocumentCategory" SortExpression="DocumentCategory" />
<asp:CheckBoxField DataField="TopDoc" HeaderText="TopDoc" SortExpression="TopDoc" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConflictDetection="CompareAllValues" ConnectionString="<%$ ConnectionStrings:ClubSiteDB %>" DeleteCommand="DELETE FROM [Documents] WHERE [DocumentID] = @original_DocumentID AND [DocumentName] = @original_DocumentName AND [DateInput] = @original_DateInput AND [Comments] = @original_Comments AND [DocumentCategory] = @original_DocumentCategory AND [TopDoc] = @original_TopDoc" InsertCommand="INSERT INTO [Documents] ([DocumentName], [DateInput], [Comments], [DocumentCategory], [TopDoc]) VALUES (@DocumentName, @DateInput, @Comments, @DocumentCategory, @TopDoc)" OldValuesParameterFormatString="original_{0}" SelectCommand="SELECT * FROM [Documents]" UpdateCommand="UPDATE [Documents] SET [DocumentName] = @DocumentName, [DateInput] = @DateInput, [Comments] = @Comments, [DocumentCategory] = @DocumentCategory, [TopDoc] = @TopDoc WHERE [DocumentID] = @original_DocumentID AND [DocumentName] = @original_DocumentName AND [DateInput] = @original_DateInput AND [Comments] = @original_Comments AND [DocumentCategory] = @original_DocumentCategory AND [TopDoc] = @original_TopDoc">
<DeleteParameters>
<asp:Parameter Name="original_DocumentID" Type="Int32" />
<asp:Parameter Name="original_DocumentName" Type="String" />
<asp:Parameter Name="original_DateInput" Type="DateTime" />
<asp:Parameter Name="original_Comments" Type="String" />
<asp:Parameter Name="original_DocumentCategory" Type="Int32" />
<asp:Parameter Name="original_TopDoc" Type="Boolean" />
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="DocumentName" Type="String" />
<asp:Parameter Name="DateInput" Type="DateTime" />
<asp:Parameter Name="Comments" Type="String" />
<asp:Parameter Name="DocumentCategory" Type="Int32" />
<asp:Parameter Name="TopDoc" Type="Boolean" />
<asp:Parameter Name="original_DocumentID" Type="Int32" />
<asp:Parameter Name="original_DocumentName" Type="String" />
<asp:Parameter Name="original_DateInput" Type="DateTime" />
<asp:Parameter Name="original_Comments" Type="String" />
<asp:Parameter Name="original_DocumentCategory" Type="Int32" />
<asp:Parameter Name="original_TopDoc" Type="Boolean" />
</UpdateParameters>
<InsertParameters>
<asp:ControlParameter Name="Comments" Type="String" ControlID="TextBox2"/>
<asp:ControlParameter Name="DocumentCategory" Type="Int32" ControlID="DropDownList1" PropertyName="SelectedValue"/>
<asp:ControlParameter Name="TopDoc" Type="Boolean" ControlID="RadioButtonList1" PropertyName="SelectedValue" />
</InsertParameters>
</asp:SqlDataSource>
</p>
<h2>Add a New File:</h2>
<h5>Pick a Category:</h5>
</p ID="DropDownList1" runat="server" DataSourceID="SqlDataSource1" DataTextField="CategoryName" DataValueField="CategoryID">
<h5>File Comments:</h5>
</p ID="TextBox2" runat="server">
<h5>Show up on the Top-Document List?</h5>
<p>
<asp:RadioButtonList ID="RadioButtonList1" runat="server">
<asp:ListItem Value="true">Yes</asp:ListItem>
<asp:ListItem Value="false">No</asp:ListItem>
</p>
<h5>File to upload</h5>
<br ID="FileUpload1" runat="server" />
<br ID="Button2" runat="server" Text="Upload" OnClick="Button2_Click" />
</asp:Label ID="Label1" runat="server" Text="Label">
</p>
<p>
</p>
</div>
</asp:Content>
Bugs για το file upload:
- όταν κάνω update στα fields του row στο GridView2 και σώζω χάνει το file name
- όταν χάσει το file name δεν μπορώ να κάνω delete
- όταν κάνω delete (χωρίς το παραπάνω πρόβλημα) τότε φεύγει το record αλλά δεν φεύγει το αρχείο.
Προφανώς πρέπει να γραφτεί κάτι και για τα update, delete.... απλά τα έπαιξα σήμερα... άμα μπορείτε να βοηθήσετε ευπρόσδεκτοι.
References:
- thread: clubsite whitepaper errors? http://forums.asp.net/983940/ShowPost.aspx
ο τελευταίος εκεί ζητάει τον κώδικα σε c#
- το κώδικα για το file upload στο help και μετά στην ΜSDN (τελικά δεν κράτησα ref από κανένα)
Ερωτήσεις
Έχω μία ερώτηση ακόμη... αλλά δεν έχω κουράγιο (και εδώ πάει το γριά... πριν από 3 χρόνια δεν θα μάσαγα και θα πήγαινα μέχρι το πρωί χωρίς ιδιαίτερες παρενέργειες!) αύριο πάλι...
Παρατηρήσεις
Για τους guru: nα σας πω άμα σας έχω πρήξει ... και χαλάω το κλίμα με ερωτήσεις για τους εντελώς άσχετους πείτε το... και θα το κόψω.
Για τους εντελώς αρχάριους: μην απογοητεύεστε... το Kit είναι καλό και αποκαλυπτικό...