如何从 JS 访问 ViewBag
Posted
技术标签:
【中文标题】如何从 JS 访问 ViewBag【英文标题】:How do I access ViewBag from JS 【发布时间】:2012-04-17 23:28:45 【问题描述】:我尝试过的方法。
通过浏览器查看 JS,@ViewBag.CC
只是空白...(缺失)
var c = "#" + "@ViewBag.CC";
var d = $("#" + "@ViewBag.CC").value;
var e = $("#" + "@ViewBag.CC").val();
var c = "@ViewBag.CC";
var d = $("@ViewBag.CC").value;
var e = $("@ViewBag.CC").val();
【问题讨论】:
【参考方案1】:如果您使用的是剃须刀引擎模板,请执行以下操作
在你看来写:
<script> var myJsVariable = '@ViewBag.MyVariable' </script>
更新: 更合适的方法是在主布局上定义一组配置,例如基本 url、facebook API 密钥、Amazon S3 基本 URL 等...```
<head>
<script>
var AppConfig = @html.Raw(Json.Encode(new
baseUrl: Url.Content("~"),
fbApi: "get it from db",
awsUrl: "get it from db"
));
</script>
</head>
您可以在 javascript 代码中使用它,如下所示:
<script>
myProduct.fullUrl = AppConfig.awsUrl + myProduct.path;
alert(myProduct.fullUrl);
</script>
【讨论】:
为什么@
在<script>
之前?
在Script前减去@符号,这是正确答案。谢谢
使用传统
@amd 这很有帮助。 +1【参考方案2】:
试试:var cc = @Html.Raw(Json.Encode(ViewBag.CC)
【讨论】:
@Doomsknight。我希望你不要使用它。 在这种情况下,检查 ViewBag.CC 服务器端的值,在某些情况下您可能没有设置它。【参考方案3】:<script type="text/javascript">
$(document).ready(function()
showWarning('@ViewBag.Message');
);
</script>
您可以像这样在 javascript 中使用 ViewBag.PropertyName。
【讨论】:
我不确定 showWarning 的作用。 (没有为我做任何事情)但其余的确实包含正确的值。所以我在我的代码中看到了showWarning('2');
。
我正在使用此代码,它只调用警报并且工作正常。你可以改变 alert('@ViewBag.Message');它会起作用的。【参考方案4】:
ViewBag
是服务器端代码。Javascript
是客户端代码。
你不能真的连接它们。
你可以这样做:
var x = $('#' + '@(ViewBag.CC)').val();
但它会在服务器上被解析,所以你并没有真正连接它们。
【讨论】:
我想你有一个额外的括号?我试过与此类似,但使用"
。
@Doomsknight。 '
或 "
是一回事。好用吗?
在运行时我看到var c = $('#' + '2').val();
@Doomsknight。好的。 所以它正在工作...... :) 你在 ViewBag.CC
中有 2
现在看到 2,我回到 var c = '@ViewBag.CC';
似乎现在可以工作了:/ 也许一起运行一些方法会破坏这一切。谢谢【参考方案5】:
您可以通过这样做来实现解决方案:
JavaScript:
var myValue = document.getElementById("@(ViewBag.CC)").value;
或者如果你想使用jQuery
,那么:
jQuery
var myValue = $('#' + '@(ViewBag.CC)').val();
【讨论】:
我猜 javascript 替代方案可能会帮助其他人 +1。我也认为你可以写'#@(ViewBag.CC)'
是的,你可能是对的@Doomsknight,因为世界包含多种解决方案:-)
是的@Doomsknight,你是对的。我只是尝试详细说明是一种简单的方法。 ;-)【参考方案6】:
现有的解决方案都不适合我。这是我发现确实有效的另一个解决方案:
控制器:
TempData["SuccessMessage"] = "your message here";
查看:
let msg = '@TempData["SuccessMessage"]';
【讨论】:
以上是关于如何从 JS 访问 ViewBag的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Marionette.js ItemView 模板访问 Backbone.Model 方法?
如何从 Node.js 访问、检索、存储和删除文件到远程文件服务器?