MVC3 html助手和javascript

时间:2011-11-21 17:06:34

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

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

离。

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

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

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

2 个答案:

答案 0 :(得分:1)

当我想做这样的事情时,我倾向于保持尽可能简单。这里有一些代码听起来很合适。

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();
        }
    }
}

如果这样做没有帮助,请在问题中添加更多说明,我们会尽力提供帮助。

答案 1 :(得分:1)

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

首先,如果不在布局页面等中使用其他方法调用,则每页只能输出一个<script>$(".searchControl").timeout()</script>代码块。

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

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