我有一个像这样的Action方法
[HttpPost]
public ActionResult DoSearchRequestOperation(SearchRequestModelDto data)
{
//..
}
当我使用此网址字符串http://localhost:9124/Search/SearchRequest?searchRequestFor=0
时,它可以正常工作。但是当我使用网址http://localhost:9124/Search/SearchRequest?searchRequestFor=
时,它会抛出此异常
System.ArgumentException:参数字典包含null 非可空类型的参数'searchRequestFor'的条目 'xxxx.Shared.Dto.Process.Search.SearchRequestFor'用于方法 “System.Web.Mvc.ActionResult SearchRequest(xxxx.Shared.Dto.Process.Search.SearchRequestFor)'in “xxxx.WebServer.UI.Controllers.SearchController
如果用户提供第二个网址,则应该取值0.
我尝试更改maproute,如下所示,但这也无效。
routes.MapRoute(
"Default1", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Dashboard", id = 0 }
);
这是SearchRequestModelDto类
[DataContract]
public class SearchRequestModelDto : UIBoundDto
{
public SearchRequestModelDto()
{
Criteria = new SearchRequestCriteriaDto();
SearchResult = new SearchRequestResultDto();
}
[DataMember]
public SearchRequestCriteriaDto Criteria { get; set; }
[DataMember]
public SearchRequestResultDto SearchResult { get; set; }
}
答案 0 :(得分:0)
这是因为SearchRequestFor类型应该是可以为空的
public ActionResult SearchRequest(SearchRequestFor? searchRequestFor)
{
//...
}
答案 1 :(得分:-1)
如果您希望能够在查询字符串中发送空值,则可以使SearchRequestFor
视图模型上的SearchRequestModelDto
属性成为可以为空的整数:
public int? SearchRequestFor { get; set; }
您在路由中设置id=0
这一事实对查询字符串参数没有影响。它们不受路由控制,因此您必须编写自定义模型绑定器或在模型上使用可为空的整数。后者是首选。