2011-11-21 59 views
3

我有一個MVC3的HTML幫助,呈現正在被用作搜索控制的HTML的自定義部分。問題是存在JavaScript(jquery),它已經被寫入與控件進行交互(它真的應該只用於這個控件)。有沒有一種方法可以使JavaScript嵌入,使控件繼續具有JavaScript功能。 (通過創建幫助程序,我們可以控制html的結構,並且可以更輕鬆地編寫javascript,這將標準化控件在整個應用程序中的使用。MVC3的HTML幫手和javascript

ex。

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

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

我希望能夠調用@ Html.SearchControl([有些PARAMS])時設置的「超時」的功能,這樣的JavaScript和幫助相結合和輔助的用戶不必擔心在調用'超時'時應該使用哪些選擇器。有誰知道如何做到這一點?有沒有更好的方法來處理這個問題?

回答

1

使用單個共享javascript文件很難製作完全可重用的html助手。

首先,是不能輸出每頁只有一個<script>$(".searchControl").timeout()</script>代碼塊,而無需使用額外的方法調用頁面佈局等

你可以添加自己的特定控制數據屬性,如數據搜索控制並在$("input[data-search-control]").timeout()等選擇器中使用它來區分只由您的幫助器生成的HTML。

如果在頁面上有多個腳本阻塞是可以的,請不要忘記它們會被執行幾次,因此您需要關心防止多次執行。您可以使用例如jQuery $("").data()方法將某些數據與腳本已經處理的HTML節點相關聯。或者作爲選項,您可以檢查是否聲明瞭全局範圍中的指定對象,如果是,則不做任何事情,否則請聲明並調用您的方法。

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

如果這沒有幫助,請在您的問題中添加更多描述,我們將盡力幫助。