1

私はこのようなアクションメソッドを持っています

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

この URL 文字列http://localhost:9124/Search/SearchRequest?searchRequestFor=0を使用すると、機能します。しかし、URLhttp://localhost:9124/Search/SearchRequest?searchRequestFor=を使用すると、この例外がスローされます

System.ArgumentException: パラメーター ディクショナリに、メソッド 'System.Web.Mvc.ActionResult SearchRequest(xxxx.Shared. 「xxxx.WebServer.UI.Controllers.SearchController 内の Dto.Process.Search.SearchRequestFor)」

ユーザーが 2 番目の 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 型が null 許容である必要があるためです。

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

クエリ文字列で null 値を送信できるようにする場合は、ビュー モデルのSearchRequestForプロパティをnull 許容整数にすることができます。SearchRequestModelDto

public int? SearchRequestFor { get; set; }

id=0ルートに設定したという事実は、クエリ文字列パラメーターには影響しません。それらはルートによって管理されないため、カスタム モデル バインダーを作成するか、モデルで null 許容整数を使用する必要があります。後者が好ましい。

于 2012-07-09T05:57:30.830 に答える