現在、Umbraco MVC 4 プロジェクト バージョン 6.0.5 に取り組んでいます。プロジェクトは現在、Vega.USiteBuilder を使用して、マッピング属性を持つ厳密に型指定されたクラスに基づいて、バックオフィスで適切なドキュメント タイプを構築します。したがって、すべてのカミソリ ファイルは UmbracoTemplatePageBase から継承します。
Razor ファイルから HTTP GET を呼び出そうとすると、障害が発生します。たとえば、Html.BeginUmbracoForm を使用して SurfaceController を使用して、コントローラー アクション メソッドに送信する複数のフィールドを持つ検索フォームです。
私の Html.BeginUmbracoForm は次のようになります
@using (Html.BeginUmbracoForm("FindTyres", "TyreSearch"))
{
// Couple of filter fields
}
基本的に、Umbraco の外部 (Umbraco データベースの外部) の外部データベースからいくつかのレコードを取得し、その結果をカスタム ビュー モデルで Umbraco フロント エンド ビューに返すシナリオがあります。コントローラーとアクション メソッドが SurfaceController から継承するようにセットアップされ、その後コンパイルして検索を送信すると、要求された URL が指定された場所に 404 リソースが見つかりません: /umbraco.RenderMVC.
ここに私のコードスニペットがあります:
public ActionResult FindTyres(string maker, string years, string models, string vehicles)
{
var tyreBdl = new Wheels.BDL.TyreBDL();
List<Tyre> tyres = tyreBdl.GetAllTyres();
tyres = tyres.Where(t => string.Equals(t.Maker, maker, StringComparison.OrdinalIgnoreCase)
&& string.Equals(t.Year, years, StringComparison.OrdinalIgnoreCase)
&& string.Equals(t.Model, models, StringComparison.OrdinalIgnoreCase)
&& string.Equals(t.Version, vehicles, StringComparison.OrdinalIgnoreCase)).ToList();
var tyreSearchViewModel = new TyreSearchViewModel
{
Tyres = tyres
};
ViewBag.TyreSearchViewModel = tyreSearchViewModel;
return CurrentUmbracoPage();
}
次に、標準の MVC である Html.BeginForm (唯一の違い) を使用します。上記の手順を繰り返して検索を送信すると、次の YSOD エラーが発生します。
SurfaceController フォームを使用する場合、UmbracoPageResult は Http POST のコンテキストでのみ使用できます
以下は、HTML BeginForm のスニペットです。
@using (Html.BeginForm("FindTyres", "TyreSearch"))
{
// Couple of filter fields
}
コントローラーにカスタムモデルをかみそりファイルに返させるために、Umbracoルートと戦っているように感じます。カスタム ルートを作成しようとするまで、基本的な検索を行ってカスタム モデルを Umbraco フロント エンド ビューに戻す方法を見つけようと、Google でよく検索しましたが、それもうまくいきませんでした。
カスタム モデルを返すために、コントローラーは特別な umbraco コントローラー クラスから継承する必要がありますか? 私は基本的に HTTP GET リクエスト (必須) を呼び出して、基準検索フィールドが URL のクエリ文字列に適切に反映されるようにしたいと考えています。たとえば、検索ボタンを押すと、アドレス ブラウザ バーに URL の例が表示されます。
http://[ドメイン名]/selecttyres.aspx/TyresSearch/FindTyresMake=ASIA&Years=1994&Models=ROCSTA&Vehicles=261
したがって、Surface Controller は HTTP Post のコンテキストで動作するため、使用できません。
umbraco コントローラー、ルート、およびパイプラインについて詳しく読むことができる優れたリソース資料はありますか。
このシナリオが理解できることを願っています。ご不明な点がございましたら、お気軽にお問い合わせください。ここからプロジェクトを続行するには、この概念を理解する必要があり、締め切りがあります。