加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 09:34:09 所属栏目:asp.Net 来源:网络整理
导读:有没有办法将模型数据传递给外部 javascript,而我的View上没有隐藏变量.我使用谷歌地图显示图钉,地图是通过javascript加载的,同时我有(大)纬度列表,经度信息作为我的模型数据的一部分,在我的请求中提取.我不想在我的html中有一长串隐藏变量,还要减少一次ajax
有没有办法将模型数据传递给外部 javascript,而我的View上没有隐藏变量.我使用谷歌地图显示图钉,地图是通过javascript加载的,同时我有(大)纬度列表,经度信息作为我的模型数据的一部分,在我的请求中提取.我不想在我的html中有一长串隐藏变量,还要减少一次ajax调用服务器来获取我的javascript中所需的信息(lat / lon).有没有办法有效地做到这一点?

谢谢.

解决方法

最简洁的答案是不.”

如果需要在视图旁边返回原始数据模型,唯一的选择是在视图中嵌入数据.这两个选项是:

在一个HTML元素(一种尴尬的IMO):

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

在脚本中:

<script>
  var myData = {Name: Jason};
</script>

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

我同意这样做有点烦人,但是一个请求是一个请求……它只是一个数据流.以这种方式引导数据是相当普遍的,因此未来版本的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>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读