Вы не должны ставить какие-либо скрипты в партиалы. Скрипты принадлежат отдельным файлам JavaScript. Они не должны смешиваться с разметкой. Поэтому поместите ваш скрипт в отдельную функцию:
function hookupAutoComplete() {
// notice that since we have externalized this into a separate js file
// we can no longer use url helpers here => we will fetch the url
// from the textbox
var url = $('#Name').data('url');
$('#Name').autocomplete({
source: function(request, response) {
$.ajax({
url: url,
data: JSON.stringify({ 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;
}
});
}
, который предполагает, что URL-адрес хранится как атрибут data5 * HTML5:
@Html.TextBoxFor(model => model.Name, new { data_url = Url.Action("GetCountriesB", "Country") })
и затем при успешном обратном вызове вашего AJAX-запроса, как только вы загрузите частичное в DOM, вызовите эту функцию:
$.ajax({
url: '/someurl',
success: function(result) {
$('#dialog').html(result);
hookupAutoComplete();
}
});
На самом деле вы можете попробовать удалить $(document).ready(...)
из скрипта, и он может действительно работать, но я рекомендую вывести этот скрипт из вашей разметки.