Asp.net mvc 3 mvc razor编辑器模板中的脚本

Asp.net mvc 3 mvc razor编辑器模板中的脚本,asp.net-mvc-3,razor,Asp.net Mvc 3,Razor,我使用的是editortemplate,我在下面展示了部分代码。 脚本标记将对局部视图渲染的每一行重复 有没有办法将脚本标记放入页面标题中,或者至少只在页面中包含一次 我希望代码在局部视图中,因为这是它真正属于的地方 @*显示模板/contact.cshtml*@ @模型Online.Web.Contacts.Contact 这里有东西。 @EditorFor(x=>x.FirstName) 嗯。这是我的2c,但是如果脚本不应该重复,那么模板就不是正确的位置了 使用怎么样您可以尝试以下方法:

我使用的是editortemplate,我在下面展示了部分代码。 脚本标记将对局部视图渲染的每一行重复

有没有办法将脚本标记放入页面标题中,或者至少只在页面中包含一次

我希望代码在局部视图中,因为这是它真正属于的地方


@*显示模板/contact.cshtml*@
@模型Online.Web.Contacts.Contact
这里有东西。
@EditorFor(x=>x.FirstName)

嗯。这是我的2c,但是如果脚本不应该重复,那么模板就不是正确的位置了

使用

怎么样您可以尝试以下方法:

@model IEnumerable<Online.Web.Contacts.Contact>
<script id="xxx">
  stuff here.
</script>
@Html.EditorForModel()
@model IEnumerable
这里有东西。
@Html.EditorForModel()
然后是单个联系人的另一个编辑器模板:

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

我终于找到了一个解决方案,它似乎工作可靠,至少在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>
}
@if(!Context.Items.Contains(“AddressScriptsOne”))
{
Context.Items.Add(“AddressScriptsOne”、“true”);
}

项目似乎就是为了这个目的而设计的。它在对同一EditorTemplate的多个调用中持续存在,但仅适用于一个完整的页面请求。

可以选择使用帮助器。是否可以让助手以某种方式将脚本标记添加到标题中?我在这里尝试的是在displaytemplate行中包含一个java脚本编辑模板。编辑模板属于该行。不适合模型,所以从这个意义上说,它是在正确的位置。这可能是一个选项,它只是看起来支离破碎。我将为每个可编辑网格编写三个模板。我可能需要重新审视它,以不同的方式做每件事。@Jim,是的,将脚本放入主视图似乎是一个更好的选择。我对此不满意,但这是正确的答案。我决定以一种完全不同的方式考虑问题。@Jim:我现在也有同样的问题。。。在模板中包含javascript并且不让它到处重复的最好方法是什么?
@if(!Context.Items.Contains("AddressScriptsDone"))
{
    Context.Items.Add("AddressScriptsDone", "true");
    <script type="text/javascript" src="@Url.Content("~/Scripts/Address.js?" + _Config.WebAppVersion)"></script>
}