在Underscore.js模板中连接@ Url.Content的字符串

时间:2012-05-08 00:51:36

标签: javascript templates underscore.js

我无法为@ Url.Content方法准备字符串网址。

这是我的Underscore模板代码块

 <%  var imgId = "~/Content/images/" +pocket.get('imageId'); %>   
        <div class="image1">       
            <% alert(imgId); %>         
            <img src= "@Url.Content("+<% imgId %>+")"  alt="Assigned Details" />

我会通过口袋对象传递“imageId”。

我也试过使用以下方法。获取imgId变量的编译错误

<img src= "<%= @Url.Content(string.Format("~/Content/Images/{0}", imgId)) %>" />

2 个答案:

答案 0 :(得分:0)

您使用<% ... %>评估Underscore模板中的某些JavaScript,但如果您希望输出结果在结果中,则使用<%= ... %>;来自fine manual

  

模板函数既可以使用<%= … %>插入变量,也可以使用<% … %>执行任意JavaScript代码。

您希望将imgId值插入到结果中,以便您想要:

<img src= "@Url.Content("+<%= imgId %>+")"  alt="Assigned Details" />

简化演示:http://jsfiddle.net/ambiguous/9gyKC/

据推测,@Url.Content是在服务器上运行以生成给定资源的src属性的东西。如果是这种情况那么你将不得不重新考虑这是如何工作的;执行 <%= ... %>后,浏览器中会发生@Url.Content内容,因此在运行Underscore模板时为时已晚。您对imgId错误的说明:

<img src= "<%= @Url.Content(string.Format("~/Content/Images/{0}", imgId)) %>" />

支持这一理论。您的服务器代码不知道imgId是什么,只有客户端JavaScript才知道。

答案 1 :(得分:0)

<强>解决方案: 最后,我从另一个线程中找到了解决方案:Call js function from underscore template 1. js功能

<script type="text/javascript">
var fullPath = '@HttpContext.Current.Request.Url.Scheme://@HttpContext.Current.Request.Url.Authority';
function GetPath(url) {
    return fullPath + url;
}

  1. 从您的代码中调用js:<img src= '<%= GetPath(imgId) %>' alt="Med Assigned" />