在Javascript代码中嵌入MVC模型变量

在Javascript代码中嵌入MVC模型变量,javascript,asp.net-mvc,Javascript,Asp.net Mvc,我有一些Javascript代码如下所示。它使用了模型中的替换变量,这些变量工作得很好,但是我无法确定如何从模型中获取内容位置。我有 function drawChart() { $.post('@Url.Content("~/Home/GetDataAssets")', function (d) { var data = google.visualization.arrayToDataTable(d); var options = {

我有一些Javascript代码如下所示。它使用了模型中的替换变量,这些变量工作得很好,但是我无法确定如何从模型中获取内容位置。我有

 function drawChart() {
    $.post('@Url.Content("~/Home/GetDataAssets")', function (d) {
        var data = google.visualization.arrayToDataTable(d);
        var options = {
            title: '@Model.Title',
            width: '@Model.Width',
            height: '@Model.Title',
            allowHtml: @Model.AllowHtml,
            is3D: @Model.Is3D
            };
但是我希望@Url.Content行看起来像

    $.post('@Url.Content("@Model.ContentLocation")', function (d) {
它认为@Model.ContentLocation是一个字符串,因此不起作用。当我尝试转义引号时,我没有得到所需的结果,因为它们是Html编码的。我相信那是因为我做得不对

对引号进行编码的正确方法是什么,以便从模型变量中的位置读取数据

在Stephen Muecke的帮助下,我已经完成了这项工作。这篇文章的主题应该是:

$.post('@Url.Content(Model.ContentLocation )', function (d)

JavaScript不理解MVC~/。。。路径语法。如果您打算在Ajax post或get中使用它,则需要获取该虚拟路径的实际路径。为此,您可以在设置模型时从服务器端代码执行此操作:

var urlHelper = new UrlHelper(Request.RequestContext); 
var model = new ModelClassNameHere {
    ContentLocation = urlHelper.Content("~/blah/nicepic.jpg") };

return View(model);
我建议的另一件事是将所有这些服务器端模型属性缓存到JavaScript中的全局页面设置中,以便集中处理,而不是到处都有@model.blah。此外,如果您打算在开发期间将javascript文件拆分为多个文件,这只是一个好的实践

请参见此示例:


我正在使用angular.module.value缓存包含服务器端模型内容的全局页面设置,以便在angular中传递它们。查看如何将设置值注入控制器。

var url='@Model.ContentLocation'的作用是什么;返回?对不起,我是新手…我不知道如何应用我所拥有的。如果我添加这段代码,那么变量url将位于双引号内,它们仍然需要转义?如果var url='@Model.ContentLocation';返回一个有效的url,例如/Home/GetDataAssets,然后它可以是$.postrl,函数{…我什么都没有显示。更改行$。post@Url.Content~/Home/GetDataAssets,函数d{to$。post~/Home/GetDataAssets,函数d{也没有给出任何内容,所以我假设@Url.Content是needed。我不确定“什么也不显示”是什么意思。你的意思是它没有调用控制器方法。你在浏览器控制台中看到了什么错误。而且你还没有说var Url='@Model.ContentLocation';返回什么