0

フォームから投稿した後、url パラメータを保持する方法を探しています。たとえば、私の GET メソッドは文字列「type」を受け取り、それを使用してビューに表示するレポートのタイプを決定します。URL は次のようになります。

http://mysite/Reports/Report?type=1

    [HttpGet]
    public ActionResult Report(string type)
      {
         var model = new ReportsModel()
          {  
             Report = ReportList.Find(o => o.ReportType == type)
          };

          return View(model);             
       }

ビューには、レポートのタイプに表示される日付の範囲を決定するために使用される開始日/終了日フィルターを含むフォームがあります。

@using (Html.BeginForm("Report", "Reports"))
   {
        Report.ReportName
        @Html.HiddenFor(o => o.Report.ReportType)
        @Html.EditorFor(o => o.Report.StartDate )<br/>
        @Html.EditorFor(o => o.Report.EndDate )<br/>
        <button id="reports">Report</button>
   }

上記のフォームは、指定されたレポート タイプ、開始日/終了日に基づいてデータベースからレポート データを取得し、ビューに戻るアクションにポストします。

[HttpPost]
        public ActionResult Report(GenericReportsModel model)
        {
            switch (model.Report.ReportType)
            {
                case ReportType.ReportType1:
                    model.Result = ReportRepository.GetReport<ReportType1>(model.StartDate, model.EndDate);
                    break;
                case ReportType.ReportType2:
                    model.Result = ReportRepository.GetReport<ReportType2>(model.StartDate, model.EndDate);
                    break;                    
            }    
            return View(model);
        }        

問題は、投稿後、「タイプ」パラメーターが URL から失われることです。

Before the post: http://mysite/Reports/Report?type=1 
After the post: http://mysite/Reports/Report

私はこのようなことをすることができる必要があります(これはうまくいきません):

 return View(model, new {ReportType = model.ReportType);

誰かがURLをコピーして貼り付けて他の人に送信したい場合に備えて、投稿後にURLにタイプパラメーターを保存するにはどうすればよいですか?

4

1 に答える 1

0

Report メソッドのバージョンを更新する必要がHtml.BeginFormあります。HttpPost

@using(Html.BeginForm("Report", "Report", "YourController", new { type = model.ReportType})
{
    // I am assuming that model.ReportType == type argument 
    // in your HttpGet Report action

    // The rest of the form goes here
}

アクションは次のようになります。

[HttpPost]
public ActionResult Report(string type, GenericReportsModel model)
{
    switch (model.Report.ReportType)
    {
        case ReportType.ReportType1:
            model.Result = ReportRepository.GetReport<ReportType1>(model.StartDate, model.EndDate);
            break;
        case ReportType.ReportType2:
            model.Result = ReportRepository.GetReport<ReportType2>(model.StartDate, model.EndDate);
            break;                    
    }    
    return View(model);
}   

typeが model.ReportType と等しくない場合は、自分GenericsReportModelのレポート タイプと他のレポート タイプの値を含む ViewModel を作成する必要があります。

于 2013-04-27T19:48:53.767 に答える