2011-01-27 59 views
5

我正在使用editortemplate,我在下面显示了部分代码。 对于由局部视图呈现的每个行重复脚本标记。mvc razor脚本editortemplate

有没有办法让脚本标签进入页眉,或者至少它只包含在页面中一次?

我想在部分视图中的代码,因为这是它真正属于它的地方。


@* DisplayTemplates/contact.cshtml *@ 
@model Online.Web.Contacts.Contact 

<script id="xxx"> 
    stuff here. 
</script> 

<tr> 
    <td>@Html.EditorFor(x => x.FirstName)</td> 
</tr> 

回答

2

你可以试试这个:

@model IEnumerable<Online.Web.Contacts.Contact> 
<script id="xxx"> 
    stuff here. 
</script> 
@Html.EditorForModel() 

,然后单个联系人其他编辑器模板:

@model Online.Web.Contacts.Contact 
<tr> 
    <td>@Html.EditorFor(x => x.FirstName)</td> 
</tr> 
+0

这可能是一个选项,它似乎分散。我将为每个可编辑网格编写三个模板。我可能需要重新审视它,并以不同的方式做所有事情。 – Jim 2011-01-27 08:59:32

0

嗯。这是我的2c,但如果脚本不应该重复,那么模板不是正确的地方?

如何使用Html Helper

+0

使用助手可能是一个选项。有可能让助手以某种方式将标签添加到标头中?我在这里要做的是在行显示模板中包含一个java脚本编辑模板。编辑模板属于该行。 *不*模型,所以在这个意义上,它是在正确的地方。 – Jim 2011-01-27 08:58:33

0

我终于对此有一个解决方案,似乎可靠地工作,至少在ASP.NET MVC3中。以下是我的地址编辑器模板摘录:

@if(!Context.Items.Contains("AddressScriptsDone")) 
{ 
    Context.Items.Add("AddressScriptsDone", "true"); 
    <script type="text/javascript" src="@Url.Content("~/Scripts/Address.js?" + _Config.WebAppVersion)"></script> 
} 

Context.Items似乎是为此目的而制作的。它持续多次调用同一个EditorTemplate,但仅限于一个完整的页面请求。