服务器端和客户端方法

时间:2011-06-07 09:05:53

标签: c# javascript .net ajax json

我正在使用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 可能是最佳选择吗?

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)

一些建议。

  • 拥有反映html的通用GetHtml方法。这可能很难,因为UI不能轻松统一地映射到数据字段。
  • 拥有“模块”的元描述,使用它来创建通用的GetHtml方法
  • 最后try this:它只允许您创建JavaScript方法,然后可以从C#中调用它们

我会选择第二个元描述选项,因为这是我为数据层做的事情。我基本上有一个定义我的域模型的文件。我使用它生成我的所有数据acccess pocos,nhibernate配置文件等。然后我有一个元数据文件,它向这些对象添加信息,如UI呈现信息和字段验证信息。

TNX