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

How to render Url.Action with data in an Underscore.js template?

单击下载按钮时,我正在尝试下载 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 link 时,它应该将 protocolid 发送到 getJsonFile() 方法?

假设 @Url.Action("getJsonFile", "Home") 返回的 url 具有以下形式 /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%> 会被正确替换。