Я пытаюсь создать розничный сайт музыкальных инструментов только для практики. Чтобы обобщить мой проект, в основном клиент может просматривать выбор инструментов, а администратор имеет дополнительный доступ к системе управления контентом, которую я пытаюсь сделать на веб-сайте. Затем администратор может добавлять или удалять новые/старые продукты, а также просматривать все элементы через Gridview.Как создать систему управления контентом с помощью asp.net?
Общая идея моей CMS, например, у меня есть гитарные бренды под названием «Ibanez» и «Fender» (каждый из которых имеет свой собственный Griview, поскольку их база данных разделена). Я создал веб-страницу, где администратору потребуется заполнить все необходимые данные внутри текстового поля, чтобы создать элемент в «Ibanez» и «Fender» или создать совершенно новый бренд с новыми элементами. Если администратор уже закончил с информацией, просто нажмите «Сохранить» и, наконец, новый бренд или новый продукт появится на веб-сайте. Итак, допустим, если администратор хочет создать новый бренд под названием «Gibson», программа автоматически создаст gridview для этого бренда в разделе обзора моего веб-сайта.
Теперь, чтобы достигнуть всего этого, я сделал, когда админы удалили save для создания новых брендов или продуктов, я создал код, в котором он будет модифицировать/писать новый код в некоторых файлах проекта. Он даже запрограммирован на создание новых файлов, просто добавив расширение .cs или .aspx, а затем просто будет использовать streamwriter для создания нового кода внутри нового файла.
Вот пример моего кода, где вы пишете новый код в файле:
var gridViewLines = File.ReadAllLines(@"C:\Users\User1\Documents\Visual Studio 2015\WebSites\MusicStore\Pages\OverviewGuitarData.aspx");
var _gridViewLines = new List<string>(gridViewLines);
int index = counter;
index -= 1;
_gridViewLines.Insert(index++, "");
_gridViewLines.Insert(index++, " <h3>"+brand_name+" Guitar Items Data</h3>");
_gridViewLines.Insert(index++, " <div style=\"overflow:auto; width:1100px; max-height:500px;\">");
_gridViewLines.Insert(index++, " <asp:GridView ID=\"Guitar" + brand_name + "GridView\" runat=\"server\" CssClass=\"mydatagrid\" PagerStyle-CssClass=\"pager\" HeaderStyle-CssClass=\"header\" RowStyle-CssClass=\"rows\" AllowPaging=\"True\" AllowSorting=\"True\" AutoGenerateColumns=\"False\" CellPadding=\"3\" CellSpacing=\"3\" DataKeyNames=\"id\" DataSourceID=\"SqlDataSource"+brand_number+"\" OnRowDataBound=\"Guitar"+brand_name+"GridView_RowDataBound\" Height=\"250px\" Width=\"864px\">");
_gridViewLines.Insert(index++, " <Columns>");
_gridViewLines.Insert(index++, " <asp:TemplateField>");
_gridViewLines.Insert(index++, " <ItemTemplate>");
_gridViewLines.Insert(index++, " <asp:Button ID=\"Guitar"+brand_name+"GridViewBtn\" runat=\"server\" Text=\"Delete\" OnClick=\"Guitar"+brand_name+"GridViewBtn_Click\"/>");
_gridViewLines.Insert(index++, " </ItemTemplate>");
_gridViewLines.Insert(index++, " </asp:TemplateField>");
_gridViewLines.Insert(index++, " <asp:CommandField ButtonType=\"Button\" ShowEditButton=\"True\" />");
_gridViewLines.Insert(index++, " <asp:BoundField DataField=\"id\" HeaderText=\"id\" ReadOnly=\"True\" SortExpression=\"id\" />");
_gridViewLines.Insert(index++, " <asp:BoundField DataField=\"type\" HeaderText=\"type\" SortExpression=\"type\" />");
_gridViewLines.Insert(index++, " <asp:BoundField DataField=\"model\" HeaderText=\"model\" SortExpression=\"model\" />");
_gridViewLines.Insert(index++, " <asp:BoundField DataField=\"price\" HeaderText=\"price\" SortExpression=\"price\" />");
_gridViewLines.Insert(index++, " <asp:BoundField DataField=\"image1\" HeaderText=\"image1\" SortExpression=\"image1\" />");
_gridViewLines.Insert(index++, " <asp:BoundField DataField=\"image2\" HeaderText=\"image2\" SortExpression=\"image2\" />");
_gridViewLines.Insert(index++, " <asp:BoundField DataField=\"description\" HeaderText=\"description\" SortExpression=\"description\" ItemStyle-Wrap=\"false\" />");
_gridViewLines.Insert(index++, " <asp:BoundField DataField=\"neck_type\" HeaderText=\"neck_type\" SortExpression=\"neck_type\" />");
_gridViewLines.Insert(index++, " <asp:BoundField DataField=\"body\" HeaderText=\"body\" SortExpression=\"body\" />");
_gridViewLines.Insert(index++, " <asp:BoundField DataField=\"fretboard\" HeaderText=\"fretboard\" SortExpression=\"fretboard\" />");
_gridViewLines.Insert(index++, " <asp:BoundField DataField=\"fret\" HeaderText=\"fret\" SortExpression=\"fret\" />");
_gridViewLines.Insert(index++, " <asp:BoundField DataField=\"bridge\" HeaderText=\"bridge\" SortExpression=\"bridge\" />");
_gridViewLines.Insert(index++, " <asp:BoundField DataField=\"neck_pickup\" HeaderText=\"neck_pickup\" SortExpression=\"neck_pickup\" />");
_gridViewLines.Insert(index++, " <asp:BoundField DataField=\"bridge_pickup\" HeaderText=\"bridge_pickup\" SortExpression=\"bridge_pickup\" />");
_gridViewLines.Insert(index++, " <asp:BoundField DataField=\"hardware_color\" HeaderText=\"hardware_color\" SortExpression=\"hardware_color\" />");
_gridViewLines.Insert(index++, " </Columns>");
_gridViewLines.Insert(index++, " </asp:GridView>");
_gridViewLines.Insert(index++, " </div>");
gridViewLines = _gridViewLines.ToArray();
File.WriteAllLines(@"C:\Users\User1\Documents\Visual Studio 2015\WebSites\MusicStore\Pages\OverviewGuitarData.aspx", gridViewLines);
Я был успешным в этой части, но когда я пытаюсь удалить бренд, мой код не работает, и дал мне исключение, что он все еще используется другим процессом.
Вот код для удаления какой-нибудь текст в файле:
public static void SearchRemove()
{
int counter = 0;
string line;
// Read the file and display it line by line.
System.IO.StreamReader file = new System.IO.StreamReader(@"C:\Users\User1\Documents\Visual Studio 2015\WebSites\MusicStore\Pages\OverviewGuitarData.aspx");
while ((line = file.ReadLine()) != null)
{
if (line.Contains(" <h3>Gibson Guitar Items Data</h3>"))
{
break;
}
counter+=1;
}
file.Close();
Remove(counter);
}
public static void Remove(int counter)
{
int removeAt = counter;//or any thing you want
removeAt -= 1;
int linesToRemove = 70; //or any thing you want
string s = System.IO.File.ReadAllText(@"C:\Users\User1\Documents\Visual Studio 2015\WebSites\MusicStore\Pages\OverviewGuitarData.aspx");
List<string> arr = s.Split("\n".ToCharArray()).ToList();
string result = "";
for (int i = 0; i < linesToRemove; i++)
{
arr.RemoveAt(removeAt);
result = "";
foreach (string str in arr)
{
result += str + "\n";
}
System.IO.File.WriteAllText(@"C:\Users\User1\Documents\Visual Studio 2015\WebSites\MusicStore\Pages\OverviewGuitarData.aspx", result);
}
}
}
Когда я не включил извлекая часть, Everthing работает нормально. Впоследствии мне также сообщили, что подход, который я выполняю, является рискованным, а не правильным способом работы сайта, потому что администратор модифицирует содержимое файла .cs или .aspx. Честно говоря, я задумался о том, как лучше сделать это, поэтому мои вопросы:
1.) Как достичь вышеуказанной идеи без изменения/записи файла проекта?
ИЛИ
2.) Если я буду продолжать свой прежний подход. Какой алгоритм использовать, если я хочу удалить новый код, который я автоматически внедрил в файл, не получая исключение, указывающее, что этот процесс все еще используется?
отличные ссылки! Я определенно займусь этим. Кстати, я нашел ответ на вопрос №2. Оказывается, мне просто нужно переключить некоторые методы, чтобы избежать исключения. Это все еще не так, но я думаю, этого будет достаточно, пока я все еще изучаю вопрос №1. – BrunoEarth