【发布时间】:2011-11-11 06:22:02
【问题描述】:
在我的一个视图页面中,我有一个 asp.net mvc PartialView。 PartialView 包含一些 javascript(和 jquery)。在我的 asp.net 主视图中,我使用 ajax 在 div 标记中加载 PartialView,如下所示。也就是说,我从控制器返回 PartialView("_DonorEdit") 并在我的主页中使用 javascript 将 div 标记的内容替换为 PartialView 响应。
<div class="content" id="content">
@{Html.RenderPartial("_DonorEdit");}
</div>
除了包含在 partialView (_DonorEdit) 中的 javascript 之外,一切正常。因此,问题归结为 - 我如何将 javascript 嵌入到 div 标签中并且仍然让它正常工作。
只有当局部视图从 ajax 调用返回时才会出现此问题。在上面的代码中,如果我直接包含 PartialView(在非 ajax 请求上),那么 javascript 可以正常工作。但是如果我以后使用ajax请求替换div的内容,PartialView中包含的javascript就不起作用了。嵌入的 javascript 根本不会与部分视图一起出现。所以似乎还有其他原因,为什么在 ajax 请求成功后嵌入在 Partial View 中的 javascript 没有传递给浏览器。
我的javascript代码部分
<script type=...>
//Date Picker. This works. I get Calendar popup as expected
$(document).ready(function () {
$("#Donor_BirthDate").datepicker({
dateFormat: "dd-mm-yy",
changeMonth: true,
changeYear: true,
yearRange: "-75:+0"
});
$("#Donor_DateLastDonated").datepicker({
dateFormat: "dd-mm-yy",
changeMonth: true,
changeYear: true,
yearRange: "-20:+1"
});
});
//Dropdown handler. Does not make it in my final View.
function residenceStateChanged(e) {
var url = '@Url.Action("_GetCities", "DropDown")';
var cmbResidenceCityId = $('#ResidenceCityId').data('tDropDownList');
cmbResidenceCityId.loader.showBusy();
$.ajax({
type: 'GET',
url: url,
data: { StateId: e.value, AddSelectOption: true, SelectOption: 'Select' },
traditional: true,
success: function (resp, textStatus, jqXHR) {
cmbResidenceCityId.dataBind(resp);
cmbResidenceCityId.select(0);
cmbResidenceCityId.trigger.change();
},
error: function (jqXHR, textStatus, errorThrown) {
alert(jqXHR.responseText);
},
complete: function () {
cmbResidenceCityId.loader.hideBusy();
}
});
}
....//Some other code omitted. Does not make it in final view.
</script>
【问题讨论】:
-
javascript 是什么样的?
-
你能明确定义什么是行不通的吗?在 renderpartial 之后,javascript 的哪一部分不起作用?
-
@Gisli,我的部分视图中有一些下拉菜单。为了处理这些下拉菜单的 onchange 之类的事件,我有一些 javascript 代码,这是有问题的代码(即不工作,因为它包含在 div 标签中)。由于部分视图包含在许多主页中,因此我将此 javascript 代码嵌入到包含的文件(部分视图)中,而不是在我的所有主视图中复制它。
-
JavaScript 函数是否包含在 jQuery document.ready() 函数或类似函数中,因为 document.ready() 在加载部分文件之前很久就会触发。
-
@Tom,事实上它是另一种方式。 document.ready() 中包含的 JQuery 代码可以正常工作。但是在 jquery document.ready() 之外定义的其他函数根本不会出现在页面中。这是我得到参考错误的地方(“未定义函数 xxx”)。我应该在我的问题中粘贴我的 javascript 代码吗?
标签: javascript jquery asp.net-mvc asp.net-mvc-3