/ / क्या यह संभव है कि Episerver.Forms फ़ील्ड को डेटा के साथ पॉप्युलेट किया जाए - episerver, episerver-forms

क्या Episerver.Forms फ़ील्ड डेटा के साथ पॉप्युलेट करना संभव है - एपिसर्वर, एपिसर्वर-फॉर्म

मैं साथ में एपिस्सर 10 का उपयोग कर रहा हूं 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 № 1

यदि आप एक कस्टम तत्व बनाना नहीं चाहते हैं, लेकिन (मुझे लगता है कि यह सबसे अच्छा समाधान है) आप तत्व के दृष्टिकोण को बदल सकते हैं। इसके अंतर्गत स्थित होना चाहिए: मॉड्यूल _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>

संपादित करें:

Didn "t आप प्रश्न को संपादित करते हुए देखते हैं। आधार से" आधार "को हटा दें। 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" />

उत्तर № 2 के लिए 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 № 3

नए एपिसेवर फॉर्म में है ऑटोफिल एपीआई उस काम को करने में आपकी मदद करने के लिए।