我正在使用ASP.NET和C#2.0。我为数据库创建了一些对象,每个对象都有可以本地调用的属性,或者以类似的方式调用,并从中创建RESTful JSON API。
我有很多类似标签的东西,我喜欢在这个网站上称为“模块” - 模块的功能是将数据转换为HTML以显示在页面上。理想情况下,需要在服务器端C#代码中加载第一个选项卡,然后在单击选项卡时使用Ajax加载其他选项卡,但对于旧浏览器和搜索引擎,选项卡仍然是一个链接,将加载相同的HTML代码服务器端。
目前我将JavaScript代码与将每个模块转换为HTML的C#代码完全分开编写,但该方法实际上是相同的,只是一种不同的语言。与此示例类似。
C#代码
public override string GetHtml()
{
IJsonObjectCollection<Person> response = ((Village)page).People;
string html = "<div id=\"test\">";
foreach (Person person in response)
{
html += "<div class=\"person\">";
html += person.Name;
if(canEdit) html += "*";
html += "</div>";
}
return html + "</div>";
}
JavaScript代码
function getHtml() {
JsonRequest('/json/villages/1/people', function(response) {
var html = '<div id="test">';
for (int i = 0; i < response.length; i++)
{
var person = response[i];
html += '<div class="person">';
html += person.name;
if(canEdit) html += '*';
html += '</div>';
}
return html + '</div>';
});
}
你可能会看到我对这个问题的看法。这样做最有效的方法是什么?我想到了几个不同的选择 -
1。每个ModuleToHtmlMethod都可以是一个类,用于定义将此数据对象转换为HTML的方法。我尝试了这个,但我停了下来因为我太复杂了。
2。编写我自己的脚本语言,可以解释为C#,也可以“编译”成JavaScript代码。
3. 只需在C#中编写该批次并使用Ajax简单地从C#请求HTML内容
4. 保持代码分开并将每个方法写两次。
我想最终允许其他开发人员编写这些“模块”,所以选项 2 可能是最佳选择吗?
答案 0 :(得分:1)
我会丢弃选项4,因为它会使维护变得更加困难,并且您可能最终在通过Javascript生成的HTML与C#代码中生成的HTML之间不同步。我也会放弃选项2,因为这可能会使代码对其他开发人员来说更加困难,也可能是不必要的。
我肯定会在一个地方生成HTML,并且可能会公开使用C#existing函数返回HTML片段的RESTful HTML API。所以从你的Javascript中你会打电话:
function getHtml() {
MyHtmlRequest('/html/villages/1/people', function(response) {
var html = response.Text;
return html;
});
}
答案 1 :(得分:1)
一些建议。
我会选择第二个元描述选项,因为这是我为数据层做的事情。我基本上有一个定义我的域模型的文件。我使用它生成我的所有数据acccess pocos,nhibernate配置文件等。然后我有一个元数据文件,它向这些对象添加信息,如UI呈现信息和字段验证信息。
TNX
圭