[英]How to load a partialview and store it in a variable to be used in javascript?
[英]How to execute JavaScript function on PartialView load in MVC 3
\\code
public ActionResult mapPartial(DataTable dt)
{
string strEvents = "[";
foreach (DataRow row in dt.Rows)
{
strEvents += "[" + row["Lat"].ToString() + ", " + row["Long"].ToString() + ", " + "\"" +
row["LastName"].ToString() + row["DateOfBirth"].ToString() + "\"" + "],";
}
strEvents = strEvents.Remove(strEvents.LastIndexOf(","));
strEvents += "]";
ViewBag.locpoints = strEvents;
return PartialView(dt);
}
//in the partial view page
<script type="text/javascript">
function mapInit(Viewbag.locpoints) {
var arr = $.parseJSON(Viewbag.locpoints);
//more code which assigns a map to div map below
}
</script>
<div id="map" class="map"></div>
在加载局部视图时,如何立即调用JS函数来渲染我的地图。 控制器中的partial方法返回一个字符串,该字符串在JS函数中用作参数。 希望它有意义。
由于您似乎使用JQuery,为什么不:
<script type="text/javascript">
$(document).ready(function(){
var arr = $.parseJSON("@Viewbag.locpoints");
//more code which assigns a map to div map below
});
</script>
我也改变了你自从拥有它以来引用ViewBag
值的方式,它不会是JavaScript中的字符串文字。
另外,作为附注,请考虑使用JSON序列化程序将数据转换为JSON。 像上面那样手动执行它被认为是一种不好的做法。
定义之后,您只需调用它。 但是,看起来您在JS函数定义中包含了MVC Viewbag值。 调用JS方法时应该传递这些值:
<script type="text/javascript">
function mapInit(locPoints) {
var arr = $.parseJSON(locPoints);
//more code which assigns a map to div map below
}
mapInit(@(Viewbag.locpoints));
</script>
注意:这假设您已加载jQuery。
尝试通过JQuery调用您的控制器。
$(document).ready(function () {
$.ajax({
type: 'GET',
url: 'your_controller_url',
success: function (data) {
//Do your stuffs here
}
});
}
考虑使用onSuccess Ajax选项并连接编写jquery的javascript函数。 例如,您在mainView中编写了以下调用部分View的脚本。 假设您想要在单击部分视图中的锚标记时执行某些操作
var fromPartial=function()
{
var v = $(this).closest("div");
var mId = v.attr('id');
if (mId == 'divDetail') {
event.preventDefault();
//what you want to achieve
}
}
现在在局部视图中,创建锚标记,如下所示
@Ajax.ActionLink("Select", "AssignSpeaker", new {
conferenceId = ViewBag.ConferenceId, sessionId = session.Id },
new AjaxOptions() { HttpMethod="Get",
InsertionMode= InsertionMode.Replace, UpdateTargetId="yourTarget",
OnSuccess="fromPartial" })
我们实施了一个更简单的解决方案。
@RenderSection之后的@RenderSection("scripts", required: false)
(和Jquery等)
<script>
$(document).ready(function () { if (typeof partialScript !== "undefined") partialScript();});
</script>
然后,在您的局部视图中:
<script type="text/javascript">
function partialScript() {
alert("hi");
}
</script>
这确保了以下内容:
你可以做到这一点的唯一方法是使用JQuery调用你的控制器动作并让它返回你的局部视图。 使用Jquery更新部分视图转到的页面的任何部分,然后调用要渲染地图的javascript方法
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.