Я использую ASP.NET с C # 2.0. Я создал несколько объектов для базы данных, и каждый из этих объектов имеет свойства, которые могут вызываться изначально или вызываются аналогичным образом, и на их основе создается RESTful JSON API.
У меня много Вещи, похожие на вкладки, я люблю называть на этом сайте «модулями» - функция модуля заключается в преобразовании данных в HTML для отображения на странице. В идеале это необходимо сделать в коде C # на стороне сервера для загрузки первой вкладки, а затем использовать Ajax для загрузки остальных при щелчке вкладок, однако для старых браузеров и поисковых систем вкладка по-прежнему является ссылкой, которая загружает тот же код HTML на стороне сервера.
В настоящее время я пишу код JavaScript полностью отдельно от кода C #, который преобразует каждый модуль в HTML, но метод практически тот же, только другой язык. Подобно этому примеру.
Код C #
public override string GetHtml()
{
IJsonObjectCollection response = ((Village)page).People;
string html = "";
foreach (Person person in response)
{
html += "";
html += person.Name;
if(canEdit) html += "*";
html += "";
}
return html + "";
}
Код JavaScript
function getHtml() {
JsonRequest('/json/villages/1/people', function(response) {
var html = '';
for (int i = 0; i < response.length; i++)
{
var person = response[i];
html += '';
html += person.name;
if(canEdit) html += '*';
html += '';
}
return html + '';
});
}
Вероятно, вы видите, к чему я клоню с этим вопросом. Что было бы наиболее эффективным способом сделать это? Я думал о нескольких альтернативных вариантах -
1. Каждый ModuleToHtmlMethod может быть классом, определяющим метод преобразования этого объекта данных в HTML. Я попытался это сделать, но остановился, потому что стал слишком сложным.
2. Напишите свой собственный язык сценариев, который можно интерпретировать как C #, но также «скомпилировать» в код JavaScript.
3. Просто напишите все на C # и используйте Ajax, чтобы просто запросить HTML-контент с C #
4. Храните код отдельно и напишите каждый метод дважды.
Я хотел бы, чтобы со временем другие разработчики могли писать эти «модули», так что, может быть, вариант 2 будет лучшим вариантом?