当我们单击下载按钮时,我正在尝试下载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(Underscore.js模板)来绑定<%= protocolid %>,因为我正在使用Backbone.js作为客户端脚本。

如何将protocolid绑定到锚标记,以便当用户单击Download链接时,应将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%>将被正确替换。

09-27 13:10