2012-09-10 82 views
2

我试图创建,除了HTML标记生成一些JavaScript的HTML辅助扩展:的HtmlHelper扩展与脚本

<select id="foo" name="foo"></select> 

<script type="text/javascript"> 
    // script to populate select with data via $.getJSON 
</script> 

在默认的MVC 4模板,它们捆绑jQuery的脚本,并把它们在HTML文档的结尾,有一个脚本部分:

@Scripts.Render("~/bundles/jquery") 
@RenderSection("scripts", required: false) 

是否有一个HTML辅助扩展任何方式告诉脚本被添加到文档的末尾,或者我只需要修改布局,以便jQuery位于文档的顶部?

+1

如果它被多次使用,为什么不制作一个脚本文件,为它创建一个包,将它链接到jquery包之后,然后将通用代码放在$(document).ready中? – jzm

+1

,因为它不是通用的。它会根据扩展中生成的ID构建脚本。 – Dismissile

+0

这是一种方法:http://stackoverflow.com/a/5433722/453277 –

回答

1

假设你使用ViewModel作为你的视图,一种实现你所追求的方法是将这两件事分开。

所以在你查看,你有这样的事情:

@Html.DropDownListFor(model => model.Foo, Model.FooList) 
@section scripts { @Helpers.MyLittleJsCode(Model.Foo) } 

@section scripts {}将呈现的东西你在哪里都放置在布局部分(默认情况下它是jQuery的包后) 。

创建一个名为“App_Code”的文件夹,在其中创建一个名为“Helpers”的剃须刀文件。粘贴下面的内部:

@using System.Web.Mvc; 
@helper MyLittleJsCode(string jsString) { 
<script type="text/javascript"> 
    alert("@jsString"); 
</script> 
} 

这将创建一个你需要一个下拉列表,并创建在结束一个脚本块,并通过Model.Foo进去。我希望这是你以后的样子。