asp.net-mvc-2 - 将模型数据传递给外部 javascript

标签 asp.net-mvc-2

有没有办法将模型数据传递给外部 javascript,而我的 View 上没有隐藏变量。我正在使用谷歌地图来显示图钉, map 是通过 javascript 加载的,同时我有(大)纬度、经度信息列表作为我的模型数据的一部分,这些信息是在我的请求期间获取的。我不想在我的 html 中有一个很长的隐藏变量列表,也不想再减少一次对服务器的 ajax 调用以在我的 javascript 中获取所需的信息(纬度/经度)。有没有办法有效地做到这一点?

谢谢。

最佳答案

最简洁的答案是不。”

如果您需要在 View 旁边返回原始数据模型,唯一的选择是将数据嵌入到 View 中。这两个选项是:

在 HTML 元素中(有点尴尬的 IMO):

<div id="myData" data-model="{&quot;Name&quot;: &quot;Jason&quot;}"></div>

在脚本中:
<script>
  var myData = {Name: Jason};
</script>

我更喜欢第二种方法,因为没有 HTML 转义。

我同意这样做有点烦人,但是一个请求就是一个请求……它只是一个数据流。以这种方式引导数据是相当普遍的,所以也许 future 版本的 MVC 将有一种更简洁的方式来返回它(但它可能看起来就像我上面的示例之一)。

除此之外,正如您所提到的,您可以执行额外的请求以仅在 JSON 响应中接收模型。

编辑:

我有一个 HtmlHelper 来帮助解决这个问题......
public static MvcHtmlString ToScriptVariable<T, TMember>(this T value, Expression<Func<T, TMember>> expression) where T : class 
{
    var member = expression.Body as MemberExpression;
    if (member == null)
        throw new ArgumentException("Expression must be a member expression.", "expression");

    var expressionValue = expression.Compile()(value);
    var serializer = new JavaScriptSerializer();
    var seralizedData = serializer.Serialize(expressionValue);

    var tag = new TagBuilder("script");
    tag.Attributes.Add("type", "text/javascript");
    tag.InnerHtml = String.Format(CultureInfo.InvariantCulture, "var {0} = {1};", member.Member.Name, seralizedData);

    return MvcHtmlString.Create(tag.ToString(TagRenderMode.Normal));
}

用法:
<%: Html.ToScriptVariable(x => Model.MyData) %>

结果:
<script type="text/javascript">var MyData = "(whatever)"</script>

关于asp.net-mvc-2 - 将模型数据传递给外部 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4426369/

相关文章:

c# - 使用 MVC2 的 HandleErrorInfo - 模型为空?

c# - 限制某些用户的服务的最佳方式是什么

c# - 将 DisplayFor 与嵌套属性的单个索引一起使用 - Lambda 参数不在范围内

asp.net - 如何使用 ASP.Net -- Html.ActionLink()

c# - 我可以将 MVC 2 DataAnnotation 属性添加到现有属性吗?

asp.net - Ninject 给出 NullReferenceException

asp.net - 无法从 MVC2 升级到 MVC3

visual-studio-2010 - 在构建时编译 View VS2010?

asp.net-mvc - MVC - 更改链接中 URL 的一部分

asp.net - 在 ASP.NET MVC 中访问服务器上的文件