【发布时间】:2012-03-30 08:09:33
【问题描述】:
我正在动态加载 ASP.NET MVC 3 视图。在视图内部,有一个需要“自动完成”的文本框。代码如下:
@model CountryViewModel
@using (Html.BeginForm("Create", "Country", FormMethod.Post)) {
@Html.ValidationSummary(true)
<div class="field">
@Html.LabelFor(model => model.Name)
@Html.TextBoxFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
<div class="field">
@Html.LabelFor(model => model.Description)
@Html.TextBoxFor(model => model.Description)
</div>
<div class="field">
@Html.LabelFor(model => model.Latitude)
@Html.TextBoxFor(model => model.Latitude)
</div>
<div class="field">
@Html.LabelFor(model => model.Longitude)
@Html.TextBoxFor(model => model.Longitude)
</div>
@Html.HiddenFor(model => model.CultureId, new { id = "CultureId" })
}
<script type="text/javascript">
$(document).ready(function () {
$('#Name').autocomplete({
source: function(request, response) {
$.ajax({
url: '@(Url.Action("GetCountriesB", "Country"))',
data: "{ 'countryName': '" + request.term + "' }",
dataType: "json",
type: "POST",
contentType: "application/json; charset=utf-8",
dataFilter: function(data) { return data; },
success: function(data) {
response($.map(data.d, function(item) {
return {
value: item.Country
}
}))
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert(textStatus);
}
});
},
minLength: 2,
focus: function( event, ui ) {
$( '#Name' ).val( ui.item.Country );
return false;
}
});
});
我正在一个 jQuery UI 对话框中加载这个视图。当我使用 Firebug 进行调试时,似乎没有加载“脚本”标签,因此自动完成功能不起作用。
知道为什么会出现这种行为吗?
谢谢
【问题讨论】:
-
我在您的代码中没有看到任何
<script>标记...这可能是它无法正常工作的原因...您说它是“动态”加载的-如何?在通过 ajax 加载 DOM 之后? -
我使用 jQuery.ajax() 加载视图并将其放置在对话框中。它正在与其他视图一起使用(但其他视图中没有嵌入 JS)。我可以使用类似于“实时”的方式将“自动完成”附加到动态加载的元素吗?
-
响应的内容类型是什么 - 是 text/html 还是 text/plain?如果它不是 text/html,那么当您发出 Ajax 请求以加载视图时,为“text/html”设置“accepts”参数。这可以使用 $.ajaxSetup() 来完成
标签: jquery asp.net-mvc-3 jquery-ui