【问题标题】:MVC3 html helpers and javascriptMVC3 html 助手和 javascript
【发布时间】:2011-11-22 04:24:51
【问题描述】:

我在 MVC3 中有一个 html 帮助器,它呈现用作搜索控件的 html 的自定义部分。问题是已经编写了与控件交互的javascript(jquery)(它真的应该只用于这个控件)。有没有办法让 javascript 嵌入,以便控件继续具有 javascript 功能。 (通过创建帮助程序,我们可以控制 html 的结构,并使编写 javascript 变得更容易。这将标准化控件在整个应用程序中的使用)。

例如。

<div>
@Html.SearchControl("searchControlSelector")
</div>

<script>
     $("searchControlSelector").timeout();
<script>

我希望能够在调用 @Html.SearchControl([some params]) 时设置“超时”功能,以便将 javascript 和帮助程序结合起来,帮助程序的用户不必担心他们使用什么选择器调用“超时”时应使用。有谁知道如何实现这一目标?有没有更好的处理方法?

【问题讨论】:

    标签: jquery asp.net-mvc-3 html-helper


    【解决方案1】:

    很难用单个共享的 javascript 文件制作完全可重用的 html 助手。

    起初,如果不使用布局页面等中的其他方法调用,不可能每页只输出一个&lt;script&gt;$(".searchControl").timeout()&lt;/script&gt; 代码块。

    您可以添加自己的特定于控件的数据属性,例如 data-search-control,并在 $("input[data-search-control]").timeout() 等选择器中使用它来区分仅由助手生成的 HTML。

    如果您可以在页面上阻止多个脚本,请不要忘记它们将被执行几次,因此您需要注意防止多次执行。您可以使用例如 jQuery $("").data() 方法将一些数据与脚本已经处理的 HTML 节点相关联。或者作为选项,您可以检查是否声明了全局范围内的指定对象,如果是,则不执行任何操作,否则声明它并调用您的方法。

    【讨论】:

    • 我添加了他的数据属性,并在应用程序启动时将其连接起来,它工作了!这是个好主意。谢谢!
    【解决方案2】:

    当我想做这样的事情时,我倾向于让它尽可能简单。下面是一些听起来符合要求的代码。

    using System;
    using System.Text;
    namespace MvcApplication1.Helpers
    {
        public class Html
        {
            public static string SearchControl(string selector)
            {
                StringBuilder returnString = new StringBuilder();
                //put your existing code here.
                returnString.Append(String.Format("<label >{0}</label>", selector));
                //just add the JS as string, (wrapped in a 'ready' if you need that)
                returnString.Append(String.Format("<script>$(function(){$(\"{0}\").timeout();});<script>", selector));
                return returnString.ToString();
            }
        }
    }
    

    如果这没有帮助,请为您的问题添加更多描述,我们会尽力提供帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-26
      • 2013-01-05
      • 1970-01-01
      • 2011-07-27
      • 2011-08-09
      • 1970-01-01
      • 2012-01-08
      相关资源
      最近更新 更多