3

问题是如何在 ASP.Net MVC2 中创建控件/部分视图/编辑模板(ascx 文件),以使它们“自包含”。自包含在这里意味着如果某些 Javascript 代码应该应用到控件上,那不包含在页面 (aspx) 中,而是包含在控件本身中。具体例子:NerdDinner 的 DateTime.ascx。该文件包含使文本框成为一个不错的日期时间选择器的 JS 代码。

我的问题:包含页面有 jQuery.js、timepicker.js、jQueryUI 的 css 和 datepicker 的 css。(在 NerdDinner 的情况下,这些都在母版页中)。因此,每当我想为我的 DateTime 类型使用花哨的 DateTimePicker 时,包含页面必须了解这些依赖关系并且必须添加所有 js 和 css 文件。我想我在这里想念的是一个替代 ClientScript.RegisterClientScriptBlock 的解决方案。

同一个 NerdDinner 示例的其他问题:在 DateTime.ascx 中,它说 $('#Dinner_EventDate') 这是对容器类型和属性名称的依赖。这不是 DateTime 共享 EditorTemplate 的通用解决方案。

有什么建议么?

4

2 回答 2

0

我不确定这是否是 MVC 特有的问题。如果您想要一个真正独立的控件,请查看服务器控件(如复合控件或脚本控件)。这些控件不使用 ASCX 页面并且独立于 Web 应用程序。这样,您可以将 CSS 表格和 JS 页面嵌入到资源中。构建项目时,它会编译为单个 DLL。通过这种方式,您可以创建自己的控件库。然而,不利的一面是,使这些控制更加困难。如果您有兴趣,请告诉我,我会发布一个示例。看看这里,例如:http: //msdn.microsoft.com/en-us/library/aa719734%28v=vs.71%29.aspx

但是,如果你真的想使用 ASCX 页面来嵌入 javascript 和 CSS,你可以通过脚本管理器来完成(嗯,我至少用 Javascript 完成了这个,而不是 CSS)。例子:

 Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
      dim myScript as new StringBuilder
      myScript.Append("function helloWorld(){" & vbcrlf)
      myScript.Append("alert('Hi')" & vbcrlf)
      myScript.Append("}" & vbcrlf)

      ScriptManager.RegisterStartupScript(Me.Page, Me.Page.GetType(),"MyScript",myScript.toString, false)
  End Sub

此示例创建一个简单的 javascript 函数文本并将其注册到页面。不,如果你有很多 javascript,这会很麻烦。另外,我不确定这是否适用于 CSS。让我知道这是否有帮助。

于 2013-03-28T18:52:56.643 回答
0

您需要从页面链接到这些文件。否则,将破坏这些元素包含在 html 中的方式与您的控件包含在页面中的方式。

我们所做的是将所有这些单独的 js/css 文件加入一个带有一些额外代码的文件中(完成一次)。这样,您只能从母版页链接到单个文件。只要你没有什么特别重的东西,那是非常合理的。

对于 id 问题,将 jquery 更改为按 css class 搜索


原始答案:忽略下面,我认为它还没有在单独的文件中。

将其移至 .js 文件,并从使用 id 更改为使用类。

如果您想保持其结构化/仅专用于该控件代码的文件上的 .js 代码,您可以这样做并添加一些额外的代码,将站点中的所有各种 .js 文件连接到单个 .js 文件中。这使您可以随意构建它,而不会收到不必要的额外请求。

于 2010-09-14T21:40:06.890 回答