C# ASP.Net MVC5 Ajax为PartialView调用的操作不返回响应内容
场景: 我正在实现一个搜索功能。一旦用户停止键入,搜索值和一些其他值就会通过C# ASP.Net MVC5 Ajax为PartialView调用的操作不返回响应内容,c#,jquery,ajax,asp.net-mvc,C#,Jquery,Ajax,Asp.net Mvc,场景: 我正在实现一个搜索功能。一旦用户停止键入,搜索值和一些其他值就会通过AJAX传递给控制器。由于下面描述的问题,工作即将完成,它只是缺少显示匹配结果的能力 问题: 值被正确发送到控制器上的操作,并且PartialViewResult对象被正确生成,这意味着没有引发异常,并且它不是null。但是AJAX代码不接收任何内容 正如您所看到的,服务器正在返回200 HTTP代码,但没有返回任何内容 如果你能给我一个解决办法,我会很高兴的。我有一种感觉,我遗漏了一些非常琐碎的东西,但我目前无法发现
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>
控制器上的操作:
[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
});
}
}
[HttpGet]
//[自定义属性]
公共PartialViewResult搜索(搜索设置搜索设置)
{
尝试
{
var filters=DefaultSearchFilter.DefaultFilters(searchSettings.ObjectType,searchSettings.SearchValue);
var itemList=GetList(过滤器,新排序(1,true),25);
var viewModel=新的GenericSearchModel
{
SearchResults=itemList,
SearchSettings=SearchSettings
};
//分配给变量以便于调试
var viewResult=PartialView(“\u GenericSearch”,viewModel);
返回查看结果;
}
捕获(例外情况除外)
{
这是一个错误(ex);
返回PartialView(“\u GenericSearch”,新的GenericSearchModel
{
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; }
}
公共类搜索设置
{
公共字符串搜索URL{get;set;}
公共字符串JsonObjectUrl{get;set;}
公共字符串搜索值{get;set;}
//枚举以确定dto的类型
公共对象类型对象类型{get;set;}
公共布尔?IsMultipleSelection{get;set;}
}
公共类GenericSearchModel,其中T:IWebObject
{
公共搜索设置搜索设置{get;set;}
公共列表搜索结果{get;set;}
}
其他信息:
注意:如果在浏览器地址栏中输入URL,则操作的响应:Search
也没有内容
Edit1:
我只是觉得应该在调试->异常窗口中的每个CLR异常上启用visualstudios功能。现在引发的第一个异常是InvalidOpertaionException
,其他数据:
传入字典的模型项的类型为“GenericSearchModel'1[Address]”,但此字典需要类型为“GenericSearchModel'1[IWebObject]”的模型项
注意:address对象是IWebObject的一个实现
现在我有了问题的根源,这与这个问题的意思完全不同,我将采用不同的方法。因为我需要重新思考GenericSearch构造,所以没有必要对初始问题做进一步的研究(AJAX
call没有收到任何响应内容)。您是否尝试在控制器操作中设置断点以确保操作确实被命中?可能是路由问题。GetList方法返回什么?你能发布那段代码吗?是的,正如我在问题中所写的,该操作被正确调用,否则在调用AJAX的代码中我不会得到200响应代码。@freshbm它从api中提取一些数据。不幸的是,我不能在这里发布它的代码。太多了..你能用success()函数代替done()吗?您是否尝试过在控制器操作中设置断点以确保该操作实际被命中?可能是路由问题。GetList方法返回什么?你能发布那段代码吗?是的,正如我在问题中所写的,该操作被正确调用,否则在调用AJAX的代码中我不会得到200响应代码。@freshbm它从api中提取一些数据。不幸的是,我不能在这里发布它的代码。太多了..你能用success()函数代替done()吗?
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; }
}