2017-01-18 5 views
1

Я использую Episerver 10 вместе с дополнением Episerver.Forms. Я создал форму, содержащую несколько полей. Интересно, есть ли возможность предварительно заполнить эти поля данными.Возможно ли заполнять поле Episerver.Forms данными

Пример: Поле для адреса электронной почты. Если пользователь вошел в систему, я хочу, чтобы в этом поле была отправлена ​​электронная почта из профиля пользователя в качестве значения.

Я создал свое собственное поле для электронной почты, и я попытался использовать метод SetDefaultValues, но, видимо, он предназначен для чего-то другого.

EDIT:

Мой заказ поля формы:

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

Если вы не хотите, чтобы создать пользовательский элемент (но я думаю, что это самое лучшее решение) вы можете изменить представление элемента. Он должен быть расположен в: \ Modules \ _protected \ EPiServer.Forms \ Views \ 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> 

Edit:

Не видел, как вы редактируете вопрос. Удалите «базу» из base.PredefinedValue в SetDefaultValues ​​и он должен работать.

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

Это, но не из коробки. Обычно мы решаем это, создавая пользовательские элементы.

Дэвид Книпе написал отличный блог на это, 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 имеют Autofill API, чтобы помочь вам выполнить именно эту работу.