【发布时间】:2016-09-16 18:14:03
【问题描述】:
@{
Layout = null;
string something = "";
}
<head>
<script type="text/javascript">
function VName(vwname) {
if (vwname == "Dialog") {
@ViewBag.viewname="Dialog";
}
else {
@ViewBag.viewname="Fields";
}
@{something = ViewBag.viewname;}
return @something;
}
</script>
</head>
<body>
<a href="#modal-two" class="btn" onclick="@something= VName('')" >Modal!3</a>
<div class="modal" id="modal-two" aria-hidden="true" >
<div id="md1" class=" modal-dialog " style=" width:650px; height :500px; "> <input type="button" id="PostID" /> @something
<iframe src='@Url.Action(something, "Treeview")' frameBorder="0" style=" height:100%; width:100% ;" ></iframe>
<a id="nice" href="#modal-one" class="btn" style=" visibility:hidden">Nice!</a>
</div>
</div>
</body>
我正在尝试动态更新 iframe src 中的 Url.Action,但 razor 变量 @someting 正在 javascript 中更新,但未反映在 Url.Action 中。 ViewData 也发生了同样的事情
有没有其他方法可以做到这一点或其他尝试相同的方法。
【问题讨论】:
-
@Url.Action()是服务器端代码,在发送到视图之前在服务器上进行评估。function VName(vwname)是当时甚至不存在的 javascript 代码。并且您的 javascript 函数无法设置ViewBag属性的值(这是服务器端代码) -
但是 mvc 值的优势可以在变量中动态更新我只是想弄清楚该怎么做
-
不,它不能!您似乎没有理解在服务器上运行的代码和在客户端浏览器上完全独立运行的代码之间的区别。
-
我正在使用的变量是 razor 变量,它可以通过 javascript 访问以及查看 cshtml 提供的脚本在 cshtml 的同一页面中,我非常接近这样做;如果我可以在 javascript 中访问它的(剃刀变量)值,那么我必须有一些方法来设置和更改它的值;不过你可以试试
-
当然不是。首次渲染页面时查看
scr属性的值 - 它的 html 已在服务器上生成并发送到视图。更改something的值不会更新 html。如果你想这样做,你需要$('iframe').attr('src', someValue);
标签: javascript asp.net-mvc razor