2017-11-02 10 views
0

私はプログラム的にページを作成するには、このコードEpiserverはプログラム的

 var parent = ContentReference.StartPage; 
     IContentRepository contentRepository = EPiServer.ServiceLocation.ServiceLocator.Current.GetInstance<IContentRepository>(); 

     PageData myPage = contentRepository.GetDefault<LoginPage>(parent); 
     myPage.PageName = "My new page"; 

     var page = contentRepository.GetChildren<LoginPage>(parent).FirstOrDefault(name => name.Name == myPage.Name); 

     if (page == null) 
      contentRepository.Save(myPage, EPiServer.DataAccess.SaveAction.Publish); 

を使用していますページを作成します。私はこのコードをどこに置くべきかわからないのですか?

管理者/編集パネルのリストに表示するページタイプであるLoginPageを表示したくないので、そのページタイプで1ページしか作成しません。多分、スタンドアロンのページを作成し、ページタイプを作成する必要はなく、既に作成済みのページタイプを使用する必要もない別の方法があります。

これは私のページタイプのコード

[ContentType(DisplayName = "Custom Login Page", GUID = "c0d358c3-4789-4e53-bef3-6ce20efecaeb", Description = "")] 
public class LoginPage : StandardPage 
{ 
    /* 
      [CultureSpecific] 
      [Display(
       Name = "Main body", 
       Description = "The main body will be shown in the main content area of the page, using the XHTML-editor you can insert for example text, images and tables.", 
       GroupName = SystemTabNames.Content, 
       Order = 1)] 
      public virtual XhtmlString MainBody { get; set; } 
    */ 
} 

その後、私はこの

public class LoginModel : PageViewModel<LoginPage> 
{ 
    public LoginFormPostbackData LoginPostbackData { get; set; } = new LoginFormPostbackData(); 
    public LoginModel(LoginPage currentPage) 
     : base(currentPage) 
    { 
    } 
    public string Message { get; set; } 
} 

public class LoginFormPostbackData 
{ 
    public string Username { get; set; } 
    public string Password { get; set; } 
    public bool RememberMe { get; set; } 
    public string ReturnUrl { get; set; } 
} 

のようなモデルを作成していますそして、私のコントローラは、この

public ActionResult Index(LoginPage currentPage, [FromUri]string ReturnUrl) 
    { 

     var model = new LoginModel(currentPage); 
     model.LoginPostbackData.ReturnUrl = ReturnUrl; 
     return View(model); 
    } 

のように見えるだと思いますかそれを行う別の方法がありますか?私はまた、

@using EPiServer.Globalization 
@model LoginModel 

<h1 @Html.EditAttributes(x => 
x.CurrentPage.PageName)>@Model.CurrentPage.PageName</h1> 
<p class="introduction" @Html.EditAttributes(x => 
x.CurrentPage.MetaDescription)>@Model.CurrentPage.MetaDescription</p> 
<div class="row"> 
<div class="span8 clearfix" @Html.EditAttributes(x => 
x.CurrentPage.MainBody)> 
    @Html.DisplayFor(m => m.CurrentPage.MainBody) 

</div> 

@if (!User.Identity.IsAuthenticated && 
!User.IsInRole("rystadEnergyCustomer")) 
{ 
<div class="row"> 
    @using (Html.BeginForm("Post", null, new { language = ContentLanguage.PreferredCulture.Name })) 
    { 
     <div class="logo"></div> 
     @Html.AntiForgeryToken() 

     <h2 class="form-signin-heading">Log in</h2> 
     @Html.LabelFor(m => m.LoginPostbackData.Username, new { @class = "sr-only" }) 
     @Html.TextBoxFor(m => m.LoginPostbackData.Username, new { @class = "form-control", autofocus = "autofocus" }) 

     @Html.LabelFor(m => m.LoginPostbackData.Password, new { @class = "sr-only" }) 
     @Html.PasswordFor(m => m.LoginPostbackData.Password, new { @class = "form-control" }) 
     <div class="checkbox"> 
      <label> 
       @Html.CheckBoxFor(m => m.LoginPostbackData.RememberMe) 
       @Html.DisplayNameFor(m => m.LoginPostbackData.RememberMe) 
      </label> 
     </div> 

     @Html.HiddenFor(m => m.LoginPostbackData.ReturnUrl, "/login-customers") 
     <input type="submit" value="Log in" class="btn btn-lg btn-primary btn-block" /> 
    } 
    @Html.DisplayFor(m => m.Message) 
</div> 
} 
else 
{ 
<span>Welcome @User.Identity.Name</span> 
@Html.ActionLink("Logout", "Logout", "LoginPage", null, null); 
} 

は、いくつかの助けを得ることを楽しみにして私のログインビューが表示されます。

答えて

2

Episerverの概念のいくつかを誤解していると思います。

Episerverのページにしたくない場合は、PageController、ページタイプ、またはテンプレートを使用しないでください。代わりに、標準のコントローラとビューを使用してログインページを作成してください。

これ以外の場合は、LoginPageのページを作成する必要があります。このページはページツリーに表示されます。プログラムで作成する必要はありません。手動でページを追加してから、LoginPageタイプを編集モードから隠して、編集者が追加のログインページを作成しないようにします。

+0

ありがとう@Ted通常の方法や標準的な方法を作成しようとしましたが、MVCコントローラのようにアクセスできませんでした。たぶん私はそれのためのルートマッピングを作成する必要がありますか? – mohsinali1317

+0

はい、 '/ [Controller]/[Action]'などのURLを持つ標準コントローラにアクセスするには、デフォルトルートを追加する必要があります。 –

関連する問題