Добавление серверной части веб-элемента управления в сам элемент управления?
В настоящее время у меня есть веб-элемент управления и внутренний код для этого элемента управления (а также дизайнер и т. Д.).
Чтобы загрузить это как макрос в Umbraco, мне нужно сжать все это в один файл. Как бы я поступил так, не сломав что-нибудь? В настоящее время, когда я копирую, вставляю код с тэгами и т. Д.
веб-форма
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="UploadFileControl.ascx.cs" Inherits="FileUpload.UploadFileControl" %>
<form id="UploadForm" runat="server">
<asp:FileUpload id="FileUploadControl" runat="server" />
<asp:Button runat="server" id="UploadButton" text="Upload" onclick="UploadButton_Click" />
<br /><br />
<asp:Label runat="server" id="StatusLabel" text="Upload status: " />
</form>
И пользовательский бэкэнд управления
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace FileUpload
{
//this backend for the web control will be used to upload a file that will have it's XML tags pulled and displayed on a page.
//this code checks if the fileupload control has input inside it, then proceeds to the next page with the document saved.
public partial class UploadFileControl : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
//names the script manager which will be used when the user attempts to upload a form / gives an error if they incorrectly attempt to upload
protected void UploadButton_Click(object sender, EventArgs e)
{
//if file is located
if (FileUploadControl.HasFile)
{
try
{
//allow content type of document / docx
if (FileUploadControl.PostedFile.ContentType == "document/docx")
{
//if the file is is less than 51mb
if (FileUploadControl.PostedFile.ContentLength < 2000)
{
//name the filename, find the path of the name
string filename = Path.GetFileName(FileUploadControl.FileName);
//path of server upload (we just need to save it as a variable to be found on the next page, as it will be made / deleted
FileUploadControl.SaveAs(Server.MapPath("~/") + filename);
//update the label with file uploaded
StatusLabel.Text = "Upload status: File uploaded!";
}
else
//display the size the file needs to be less than
StatusLabel.Text = "Upload status: The file has to be less than 2mb!";
}
else
//tell the user only docx files are accepted
StatusLabel.Text = "Upload status: Only DOCX files are accepted!";
}
catch (Exception ex)
{
//display the exception message, in which case it would be either size / type / if it's present
StatusLabel.Text = "Upload status: The file could not be uploaded. The following error occured: " + ex.Message;
}
}
}
}
}
1 ответ
Решение
Одна возможность состоит в том, чтобы переместить ваш код за контентом на саму страницу, используя <script runat="server">
теги. Как это:
SamplePage.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="SamplePage.aspx.cs" Inherits="Test.SamplePage" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
</form>
</body>
</html>
SamplePage.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace Test
{
public partial class SamplePage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//Sample code.
}
}
}
Перевел бы на это:
SamplePage.aspx
<%@ Import Namespace="System.Web"%>
<%@ Import Namespace="System.Web.UI"%>
<%@ Import Namespace="System.Web.UI.WebControls"%>
<%@ Page Language="C#" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
//Sample code.
}
</script>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
</form>
</body>
</html>
Вы можете попробовать проверить, работает ли он с .ascx
содержание также.