私はプログラム的にページを作成するには、このコード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);
}
は、いくつかの助けを得ることを楽しみにして私のログインビューが表示されます。
ありがとう@Ted通常の方法や標準的な方法を作成しようとしましたが、MVCコントローラのようにアクセスできませんでした。たぶん私はそれのためのルートマッピングを作成する必要がありますか? – mohsinali1317
はい、 '/ [Controller]/[Action]'などのURLを持つ標準コントローラにアクセスするには、デフォルトルートを追加する必要があります。 –