情境:
我正在实施搜索功能。一旦用户停止输入,搜索值和一些其他值将以AJAX
传递给控制器。由于下面描述的问题,工作即将完成,它根本无法显示匹配结果。
问题:
这些值正确地发送到控制器上的操作,并且PartialViewResult
对象生成正确,这意味着没有抛出异常且它不是null
。但AJAX
代码未收到任何内容。
正如您所看到的,服务器正在返回200-HTTP代码,但没有内容。
如果你能引导我找到解决方案,我会很高兴的。我有一种感觉,我错过了一些非常微不足道的东西,但我目前无法发现问题的根源。
代码段:
PartialView HTML:
<div id="GenericSearch_635749743014462375" class="col-md-12">
<div>
<form id="genericSearchForm">
<input id="genericSearchTextBox_GenericSearch_635749743014462375" class="form-control" type="text" placeholder="Nummer, Name, usw." style="width: 100%; max-width: 100%"/>
</form>
</div>
<hr/>
<div id="genericSearchResults">
<div class="list-group">
<div class="list-group-item">
<h5 class="list-group-item-heading">Keine Resultate gefunden.</h5>
</div>
</div>
</div>
JS AJAX:
function searchValue(searchId, value) {
$.ajax({
method: 'GET',
url: '/Web/Search',
data: {
SearchUrl: '/Web/Search',
JsonUrl: '/Web/GetJSON',
SearchValue: value,
ObjectType: 'Address',
IsMultipleSelection: 'False'
},
contentType: "application/json; charset=utf-8"
}).done(function(response, status, xhr) {
console.log(status);
console.log(response);
}).fail(function(xhr, ajaxOptions, thrownError) {
console.log(xhr.getAllResponseHeaders);
console.log(xhr.error);
console.log(xhr.status);
console.log(thrownError);
});
}
对控制器的行动:
[HttpGet]
//[CustomAuthorizeAttribut]
public PartialViewResult Search(SearchSettings searchSettings)
{
try
{
var filters = DefaultSearchFilter.DefaultFilters(searchSettings.ObjectType, searchSettings.SearchValue);
var itemList = GetList(filters, new Sort(1, true), 25);
var viewModel = new GenericSearchModel<T>
{
SearchResults = itemList,
SearchSettings = searchSettings
};
//assigned to variable for easier debugging
var viewResult = PartialView("_GenericSearch", viewModel);
return viewResult;
}
catch (Exception ex)
{
this.Error(ex);
return PartialView("_GenericSearch", new GenericSearchModel<T>
{
SearchResults = null,
SearchSettings = searchSettings
});
}
}
物件:
public class SearchSettings
{
public string SearchUrl { get; set; }
public string JsonObjectUrl { get; set; }
public string SearchValue { get; set; }
//Enum to determinate the type of the dto
public ObjectType ObjectType { get; set; }
public bool? IsMultipleSelection { get; set; }
}
public class GenericSearchModel<T> where T: IWebObject
{
public SearchSettings SearchSettings { get; set; }
public List<T> SearchResults { get; set; }
}
其他信息:
注意:如果在浏览器地址栏中输入了网址,则操作的响应:Search
也没有内容。
EDIT1:
我只是认为我应该启用Visual Studios功能来打破调试中的每个CLR Exception
- &gt;例外窗口。现在抛出的第一个异常是InvalidOpertaionException
,附加数据:
传递到字典中的模型项的类型是&#34; GenericSearchModel&#39; 1 [地址]&#34;,但是这个字典需要类型为&#34; GenericSearchModel&#39; 1的模型项[IWebObject ]&#34;
要注意:地址对象是IWebObject的实现。
现在我有问题的根源,这与这个问题意义完全不同,我采用了不同的方法。由于我需要重新考虑GenericSearch构造,因此无需对初始问题进行进一步研究(AJAX
调用未收到任何响应内容)。