2017-01-18 35 views
1

我正在使用Episerver 10和Episerver.Forms插件。我創建了一個包含幾個字段的表單。我想知道是否有一個選項來預填充這些字段的數據。是否可以使用數據填充Episerver.Forms字段

例如: 電子郵件地址的字段。如果用戶已登錄,我希望此字段將來自用戶配置文件的電子郵件設置爲值。

我爲電子郵件創建了自己的自定義字段,我嘗試使用SetDefaultValues方法,但顯然它是用於不同的東西。

編輯:

我的自定義表單字段:

public class PostalCodeFormField : TextboxElementBlock 
{ 
    public override void SetDefaultValues(ContentType contentType) 
    { 
     base.SetDefaultValues(contentType); 
     base.PredefinedValue = "Hello world"; 
    } 
} 

模板該字段:

@model My.Valid.Namespace.PostalCodeFormField 
<div class="Form__Element FormTextbox" data-epiforms-element-name="@Model.FormElement.ElementName"> 
    <label for="@Model.FormElement.Guid"> 
     My label 
    </label> 
    <p>@Model.PredefinedValue</p> 
    <input type="text" name="@Model.FormElement.ElementName" class="FormTextbox__Input" id="@Model.FormElement.Guid" value="@Model.PredefinedValue" /> 
    <span data-epiforms-linked-name="@Model.FormElement.ElementName" class="Form__Element__ValidationError" style="display: none;">*</span> 
</div> 

事情是@Model.PredefinedValue是空喜歡SetDefaultValues從來沒有所謂

回答

2

如果你不想創建一個自定義元素(但我認爲這是最好的解決辦法)你可以改變元素的視圖。應該下位於:\模塊\ _protected \ EPiServer.Forms \查看\ ElementBlocks

爲了您的電子郵件例如,我會改變TextboxElementBlock.ascx弄成這個樣子:

<%@ import namespace="System.Web.Mvc" %> 
<%@ import namespace="EPiServer.Web.Mvc.Html" %> 
<%@ import namespace="EPiServer.Forms.Core.Models" %> 
<%@ import namespace="EPiServer.Forms.Helpers" %> 
<%@ import namespace="EPiServer.Forms.Implementation.Elements" %> 
<%@ Import Namespace="EPiServer.Personalization" %> 
<%@ control language="C#" inherits="ViewUserControl<TextboxElementBlock>" %> 

<% 
    var formElement = Model.FormElement; 
    var labelText = Model.Label; 
    var isEmailField = formElement.Validators.Any(x => x is EPiServer.Forms.Implementation.Validation.EmailValidator); 
    var defaultValue = Model.GetDefaultValue(); 
    if (isEmailField) 
    { 
     defaultValue = EPiServerProfile.Current.Email; 
    } 
%> 

<div class="Form__Element FormTextbox <%: Model.GetValidationCssClasses() %>" data-epiforms-element-name="<%: formElement.ElementName %>"> 
    <label for="<%: formElement.Guid %>" class="Form__Element__Caption"><%: labelText %></label> 
    <input name="<%: formElement.ElementName %>" id="<%: formElement.Guid %>" type="text" class="FormTextbox__Input" 
     placeholder="<%: Model.PlaceHolder %>" value="<%: defaultValue %>" <%: Html.Raw(Model.AttributesString) %> /> 

    <span data-epiforms-linked-name="<%: formElement.ElementName %>" class="Form__Element__ValidationError" style="display: none;">*</span> 
    <%= Model.RenderDataList() %> 
</div> 

編輯:

沒有看到你編輯的問題。在SetDefaultValues中從base.PredefinedValue中移除「base」,它應該可以工作。

public class PostalCodeFormField : TextboxElementBlock 
{ 
    public override void SetDefaultValues(ContentType contentType) 
    { 
     base.SetDefaultValues(contentType); 
     PredefinedValue = "Hello world"; 
    } 
} 

對於設置可以將新屬性添加到類中的「動態值(這裏獲取當前用戶的電子郵件):

public virtual string UserEmail => EPiServerProfile.Current != null ? EPiServerProfile.Current.Email : string.Empty; 

,並更新視圖中輸入:

<input type="text" name="@Model.FormElement.ElementName" class="FormTextbox__Input" id="@Model.FormElement.Guid" value="@Model.UserEmail" /> 
1

它是,但不是開箱即用。我們通常通過創建自定義元素來解決此問題

大衛Knipe寫了這樣的一個優秀的博客,https://www.david-tec.com/2016/01/building-out-a-custom-form-element-with-the-new-episerver-forms/

檢查表單模型

public override void SetDefaultValues(ContentType contentType) 
{ 
    base.SetDefaultValues(contentType); 

    // override 
    base.PredefinedValue = "Hello world"; 
} 
+0

是的,我已經看到那篇博文,但sadl y沒有關於預填充表單字段值的信息 –

+0

已更新的帖子,在表單模型的「SetDefaultValues」方法中實現預定義的值 –

+0

只需覆蓋'base.PredefinedValue' –

0

新的Episerver Forms有Autofill API來幫助你完成那項工作。

相關問題