, , , , , - , , . url, , xhr .
function pushState(target) {
var index = target.indexOf("?X-Requested-With");
if (index === -1)
index = target.indexOf("&X-Requested-With");
target = target.replace(target.substring(index), "");
manualStateChange = false;
History.pushState(null, $("input#Title").val(), target);
}
. :
@using (Html.BeginForm("Index", "Search", new { area = "Media" }, FormMethod.Get, new { @id = "search", data_url = Url.Action("SetSearchTags", "Search", new { Area = "Media" }) }))
{
<i class="fa fa-search"></i>
<input type="search" placeholder="Search" id="search" name="searchString" />
<div id="filter" name="filter">
<span><strong>Syntax</strong></span>
@foreach (var item in SearchContext.SearchFilters)
{
<div id="filter-@item">
@Html.DisplayFor(x => item)
</div>
}
</div>
}
$("form#search").submit(function (event) {
event.preventDefault();
var $form = $(this);
var searchString = $form.find("input[type='search']").val();
var url = $form.attr("action");
var method = $form.attr("method");
$.ajax({
url: url,
data: { searchString: searchString },
method: method,
success: function (data) {
$('#body-content').html(data);
updateHistory(true);
}
});
});
function updateHistory(useQuery) {
var path = (useQuery === true) ? $("#Request_Url_PathAndQuery").val() : $("#Request_Url_AbsolutePath").val();
pushState(path);
};
, , , jquery .