1

我有一个像这样的 Action 方法

[HttpPost]
public ActionResult DoSearchRequestOperation(SearchRequestModelDto data)
{
     //..
}

当我使用这个 url 字符串http://localhost:9124/Search/SearchRequest?searchRequestFor=0时,它可以工作。但是当我使用 url 时http://localhost:9124/Search/SearchRequest?searchRequestFor=,它会抛出这个异常

System.ArgumentException:参数字典包含方法“System.Web.Mvc.ActionResult SearchRequest(xxxx.Shared. 'xxxx.WebServer.UI.Controllers.SearchController 中的 Dto.Process.Search.SearchRequestFor)'

如果用户提供第二个 url,它应该取值 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; }
}
4

2 回答 2

0

这是因为 SearchRequestFor 类型应该可以为空

public ActionResult SearchRequest(SearchRequestFor? searchRequestFor)
{
    //...
}
于 2012-07-09T06:44:12.040 回答
-1

如果您希望能够在查询字符串中发送空值,则可以将视图模型上的SearchRequestFor属性设为可为空的整数:SearchRequestModelDto

public int? SearchRequestFor { get; set; }

您在路由中设置的事实id=0对查询字符串参数没有影响。它们不受路由管理,因此您必须编写自定义模型绑定器或在模型上使用可为空的整数。后者是优选的。

于 2012-07-09T05:57:30.830 回答