我是果园的新手。所以如果有什么看起来很傻,请原谅我!
我想为我的 Orchard 网站创建一个自定义小部件,以鼓励访问者注册我的时事通讯服务。我已经看到有一个使用 HTML 小部件的选项,但我想创建一个新的小部件类型,如“Newsletter”,我将在 AsideFirst 块有条件地使用它。
这可能吗?我只想获取访问者的姓名和电子邮件地址,表单提交将使用动作控制器完成。
我是否必须通过 VS 中的手动编码来创建这个小部件?实际上我想这样,而不是通过 Orchard 管理控制台。
寻求帮助。请问有什么建议吗?
编辑:我设法按照 Sipke Schoorstra 的建议创建了小部件。我要显示小部件的区域现在与我在将其添加到区域时从管理员设置的标题一起显示。但是我在视图中创建的内容(表单元素)没有显示。
视图:(Views/NewsLetterSignupPart/NewsletterSignup.cshtml)
@model Emfluence.Intrust.Models.NewsLetterSignupPart
@{
ViewBag.Title = "Newsletter Signup";
}
@using (Html.BeginForm("NewsletterSignup", "NewsLetter", FormMethod.Post))
{
@Html.AntiForgeryToken()
<div class="row-fluid">
<div class="span6">
<label>Name</label>
<input type="text" name="txtNewsletterUserName" required maxlength="50" style="width: 95%" />
<label>Email</label>
<input name="txtNewsletterUserEmail" type="email" required maxlength="85" style="width: 95%" />
<button class="btn pull-right">Submit</button>
</div>
</div>
}
迁移.cs
public int UpdateFrom15()
{
ContentDefinitionManager.AlterTypeDefinition(
"NewsletterWidget", cfg => cfg
.WithPart("NewsLetterSignupPart")
.WithPart("CommonPart")
.WithPart("WidgetPart")
.WithSetting("Stereotype", "Widget")
);
return 16;
}
NewsLetterSignupPart.cs
public class NewsLetterSignupPart : ContentPart<NewsletterSignupRecord>
{
[Required]
public string Name
{
get { return Record.Name; }
set { Record.Name = value; }
}
[Required]
public string Email
{
get { return Record.Email; }
set { Record.Email = value; }
}
}
和 NewsletterSignupRecord.cs
public class NewsletterSignupRecord : ContentPartRecord
{
public virtual string Name { get; set; }
public virtual string Email { get; set; }
}
我在哪里做错了?