首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C#代码中嵌入CSS/jQuery代码是不是很糟糕?

在C#代码中嵌入CSS/jQuery代码是不是很糟糕?
EN

Stack Overflow用户
提问于 2011-05-18 12:23:25
回答 11查看 758关注 0票数 10

在查看我们的工作代码库时,我看到了这种类型的代码:

代码语言:javascript
运行
复制
    private Button AddClearButton()
    {
        return new Button
                   {
                       OnClientClick =
                           string.Format(@"$('.{0}').css('background-color', '#FBFBFB');
                                   $('#' + {1}).val('');
                                   $('#' + {2}).val('');
                                   return false;", _className, _hiddenImageNameClientId, _hiddenPathClientId),
                       Text = LanguageManager.Instance.Translate("/button/clear")
                   };
    } 

代码语言:javascript
运行
复制
            _nameAndImageDiv = new HtmlGenericControl("div");
            var imageDiv = new HtmlGenericControl("div");
            imageDiv.Attributes.Add("style", "width: 70px; height: 50px; text-align: center; padding-top: 5px; ");

            var nameDiv = new HtmlGenericControl("div");
            nameDiv.Attributes.Add("style", "width: 70px; word-wrap: break-word; text-align: center;");
            var image = new HostingThumbnailImage();

免责声明:我以前没有使用过CSS。但是我听说我们应该分开css,js,html,C#,而不是把它们放在一起。

那么,上面的代码是不是很糟糕?如果是,更好的方法是什么?

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2011-05-18 12:42:21

在我的头顶上,我可以想到几个问题,但不是致命的。

没有特定的顺序:

  1. 您将失去在服务器或客户端缓存JavaScript文件的能力。
  2. 您将增加页面的侧面。如果每个按钮都有很多嵌入的字符串,那么页面大小,加载时间,increased.
  3. Debugging将变得非常复杂,因为你需要记住硬编码的JavaScript JavaScript increased.
  4. Debugging在C#代码中的什么地方丢失了。functionality.
  5. If studio有一个很棒的JavaScript编辑器,你可以通过硬编码字符串而失去所有的功能
  6. 我提到过Unobtrusive JavaScript是你的朋友!
  7. 你失去了分离Visual studio的好处你有相同功能的重复按钮,然后你有重复的代码。

我肯定有一堆我错过了。

票数 19
EN

Stack Overflow用户

发布于 2011-05-18 12:35:06

这不是CSS,而是使用jQuery库的JavaScript。你的怀疑是对的,这段代码有几个"smelly“部分:

  • 使用OnClientClick会产生一个onclick=""属性,这不如绑定事件好。
  • 使用并硬编码了background-color - CSS类会更好,这种颜色可能在代码或CSS文件中被复制了很多次,并且需要很多工作来改变(重新部署站点代码,而不是依赖于资源文件)。更好的方法是使用CssClass

imageDiv.CssClass = "imageDiv";

并在CSS文件中包含:

.imageDiv {宽度: 70px;高度: 50px;文本对齐:居中;填充顶部: 5px;}

这使您可以轻松地更改设计,并根据上下文设置不同的imageDiv样式(例如,当它在侧边栏中时,它可能会更小,使用带有JavaScript/CSS的String.Format的选择器.sidebar .imageDiv)

  • Use并不美观。例如,这在JavaScript中有效(并且支持jQuery ):.css({'color': '#FBFBFB', 'border-color':"green"})。在这段代码中,它应该写成字符串的.css({{'color': '#FBFBFB', 'border-color':""green""}})转义双引号,以及您提到的String.Format.

  • As的花括号,不能分隔data/presentation/behavior.
票数 12
EN

Stack Overflow用户

发布于 2011-05-18 12:35:43

生成的代码实际上是Javascript,尽管它操作了一些元素的CSS。

我会说最好的方法是在页面加载时执行它。如果你只需要将一个函数绑定到click event,你可以在Javascript/JQuery中完成这一切,就像这样:

代码语言:javascript
运行
复制
$("#<%= this.TheButton.ClientID %>").click(function () {
    $("...").css("...", "...");
    // ...
});

我怀疑ASP.NET目前只是用onclick=生成一个按钮,这通常被认为是Javascript编程的糟糕做法,但这并不是一个大问题。

在我看来,这里的一般问题是视图和模型逻辑可能混合在一起,但在传统的ASP.NET中很难避免。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6039846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档