0

POST 経由でコントローラーのアクションを呼び出すサード パーティのレポート エンジン (stimulsoft) を使用しています。フォームの内部では、サードパーティの仕組みのために多くのフィールドが送信されます。アクションの内部には、いくつかのパラメーターが必要です。すべてのパラメーターは URL 内にあります。

アクション内でモデル バインダーを使用できるようにしたいと考えています。

現時点では、このメソッドを使用して各フィールドを1つずつ取得しています

var queryString = HttpUtility.ParseQueryString(Request.UrlReferrer.Query);
var preparedBy = queryString["preparedBy"];
var preparedAt = (queryString["preparedAt"] != null) ? Convert.ToDateTime(queryString["preparedAt"]) : DateTime.Today;

UrlReferrer を使用してモデルとバインディングを使用することをお勧めします。アクションからバインドする UrlReferrerValueProvider を作成しました。私はそれを試しましたが、binder.BindModel行でNullReferenceExceptionを取得しています

public class UrlReferrerValueProvider : NameValueCollectionValueProvider
{
    public UrlReferrerValueProvider(ControllerContext controllerContext)
        : base(HttpUtility.ParseQueryString(controllerContext.HttpContext.Request.UrlReferrer.Query), CultureInfo.InvariantCulture)
    {
    }
}

public ActionResultat GetReportSnapshot()
{
    var bindingContext = new ModelBindingContext()
        {
            ValueProvider = new UrlReferrerValueProvider(ControllerContext),
            ModelName = "MyReportModel",
            FallbackToEmptyPrefix = true
        };
    var binder = new DefaultModelBinder();
    var myReportModel = binder.BindModel(ControllerContext, bindingContext);

    [...]
    return new EmptyResult();
}

public class MyReportModel
{
    public string PreparedBy {get;set;}
    public DateTime PreparedAt {get;set;}
}
4

1 に答える 1