このような問題は、BaseViewModelクラスを使用して、すべてのビューモデルを継承して、特定のページに役立つ情報を格納することをますます考えている理由です。私は最近、完全なクラス定義を考え出してきましたが、これらの目的のために、以下のプロパティを持つことはおそらくうれしいでしょう(別の質問への回答にこれの一部を投稿しました。ビット):
public class BaseModel
{
public string PageTitle { get; set; }
public string PageDescription { get; set; }
public string PageKeywords { get; set; } //maybe use a List<string> or string[] here
public string ReturnPage { get; set; }
//TBD: any other useful HTML page elements
}
そして私はこのから継承ビューモデル作成できますサービス層(好ましくは)またはコントローラに続い
public class RandomViewModel : BaseViewModel
{
RandomViewModel()
{
//set page properties
}
}
を(そこを実行する必要があり、避難所あなたがモデルを構築するときにReturnPageプロパティにアクセスすることになります(この例では、アクションでこれをやっていると仮定します):
public ActionResult RandomAction()
{
RandomViewModel model = _serviceLayer.GetRandomViewModel();
model.ReturnPage = this.HttpContext.Request.UrlReferrer;
return View(model);
}
は、次にビューで、あなたはこれを行うことができるようになります:
<input type="button" value="Cancel" onclick="if (history.length == 0) { window.location='<%= Model.ReturnPage %>' } else { history.back() }" />
これは、ブレーンストーミングのすべてだけの種類ですが、私はそれが仕事だと思います。私がよく分かっていない唯一の大きな問題は、参照元の値を設定する場所です。私もしようとし、その要素からonclickイベントを取得し、可能であればヘッダーに設定します。
これが役に立ちます。
複数のステップに戻る必要がある場合、つまりフォームの検証用に新しいページにリダイレクトする場合や、ナビゲートする複数のサブページがある場合は、これが有効です。 –
最初にページを読み込んだときにセッションに保存することができます。 – Josh