如何使用Underscore.js模板中的数据渲染Url.Action?

时间:2016-12-15 05:49:57

标签: javascript asp.net-mvc-4 backbone.js underscore.js

我在点击下载按钮时尝试下载JSON文件。

public ActionResult getJsonFile(Guid ProtocolId)
{
    List<Country> lst = new List<Country>();
    for (int i = 1; i <= 10; i++)
    {
        lst.Add(new Country() { CountryId = i, CountryName = "India" + i });
    }
    string jsondata = new JavaScriptSerializer().Serialize(lst);
    byte[] bytes = System.Text.Encoding.ASCII.GetBytes(jsondata);
    return File(bytes, "application/json", "JsonData.json");
}

如果我没有向此方法发送任何参数(ProtocolId),此代码可以正常使用。

<script type="text/ng-template">
    <button type="button" onclick="location.href='@Url.Action("getJsonFile", "Home")">Download</button>
</script>

这里,protocolid需要使用这些标签<%= protocolid %>(Underscore.js模板)进行绑定,因为我使用Backbone.js作为客户端脚本。

如何将protocolid绑定到锚标记,以便当用户点击Download链接时,它应该将protocolid发送到getJsonFile()方法?

1 个答案:

答案 0 :(得分:0)

假设@Url.Action("getJsonFile", "Home")返回的网址格式为/home/json-file/,并且您希望获得该网址:

/home/json-file/1234

您可以添加ID:

<a href="@Url.Action("getJsonFile", "Home")<%= protocolid %>">Download</a>

如果id在url中,我认为你可以在Url.Action (未测试)中将任意字符串作为id:

@Url.Action("getJsonFile", "Home", new { id = "<%=protocolid%>" })

因此它会在正确的位置生成标签,例如:

/home/get-json/<%=protocolid%>/download/

因此,当使用下划线渲染时,<%=protocolid%>会被正确替换。