使用cookie数据填充Umbraco轮廓表单

时间:2016-10-02 09:51:40

标签: umbraco7 umbraco-contour

我们目前正在使用Umbraco版本7.1.4程序集:1.0.5261.28127和Contour版本3.0.26

我尝试使用从数据库中提取的信息填充轮廓表单,但依赖于用户co​​okie(cookie保存数据库中记录的主键)。

为了实现这一点,我正在考虑编写一个自定义字段类型(很好一堆,每个数据字段一个),检查cookie生成db请求,然后用值填充文本框(用户名) /地址/等)。

我设法将自定义设置添加到控件中,并让它显示设计时填充的值,但我似乎无法在运行时修改该值。

如果相关,我很乐意发布代码,但我的问题是。我吠叫错了树吗?这是处理这种情况的最佳方式,还是会起作用?

任何指针都是最受欢迎的

由于

修改

谢谢蒂姆,    我现在设法以这样的方式打破它甚至没有渲染控件(调试消息说SVT值不存在)。 这只是(或者应该)只是用当前日期/时间填充表单以获得一些工作。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Umbraco.Forms.Core;
using System.Web.UI.WebControls;

namespace Custom.FieldType
{
    public class CustomTextfield : Umbraco.Forms.Core.FieldType
    {
        public CustomTextfield()
        {
            //Provider 
            this.Id = new Guid("b994bc8b-2c65-461d-bfba-43c4b3bd2915");
            this.Name = "Custom Textfield";
            this.Description = "Renders a html input fieldKey"; //FieldType 
            this.Icon = "textfield.png";
            this.SVT = DateTime.Now.ToLongTimeString();
        }

        public System.Web.UI.WebControls.TextBox tb;
        public List<Object> _value;

        [Umbraco.Forms.Core.Attributes.Setting("SVT", description = "the SVT")]
        public string SVT { get; set; }

        public override WebControl Editor
        {
            get
            {
                tb.TextMode = System.Web.UI.WebControls.TextBoxMode.SingleLine;
                tb.CssClass = "text gaudete";


                if (_value.Count > 0)
                    tb.Text = _value[0].ToString();

                SVT = DateTime.Now.ToLongTimeString();
                tb.Text = tb.Text + SVT;

                return tb;
            }
            set { base.Editor = value; }
        }

        public override List<Object> Values
        {
            get
            {
                if (tb.Text != "")
                {
                    _value.Clear();
                    _value.Add(tb.Text);
                }
                return _value;
            }
            set { _value = value; }
        }

        public override string RenderPreview()
        {
            return
                "<input type=\"text\" id=\"text-content\" class=\"text\" maxlength=\"500\" value=\"" + this.SVT + "\" />";
        }

        public override string RenderPreviewWithPrevalues(List<object> prevalues)
        {
            return RenderPreview();
        }

        public override bool SupportsRegex
        {
            get { return true; }
        }

    }
}

视图是

@model Umbraco.Forms.Mvc.Models.FieldViewModel
@{
    var widthSetting = Model.AdditionalSettings.FirstOrDefault(s => s.Key.Equals("Width"));
    string width = (widthSetting == null) ? null : widthSetting.Value;
    var textSetting = Model.AdditionalSettings.FirstOrDefault(s => s.Key.Equals("SVT"));
    string widthTXT = (textSetting == null) ? null : textSetting.Value;
}
<input type="text" name="@Model.Name" id="@Model.Id" class="text"  maxlength="500"  

        value="@{if(!string.IsNullOrEmpty(widthTXT)){<text>@(SVT)</text>}}"

    @{if(Model.Mandatory || Model.Validate){<text>data-val="true"</text>}}
    @{if (Model.Mandatory) {<text> data-val-required="@Model.RequiredErrorMessage"</text>}}
    @{if (Model.Validate) {<text> data-val-regex="@Model.InvalidErrorMessage" data-regex="@Model.Regex"</text>}}
/>

代码主要是从在线教程拼凑而成,这就是为什么命名很糟糕但是如果我可以在客户端填充文本框,那么我就可以开始重构过程(好好废弃这个演示版本并写一个真实的版本)

感谢。

EDIT2

由于来自Tim的指针,我能够修复停止视图加载的错误,新视图如下所示

@model Umbraco.Forms.Mvc.Models.FieldViewModel
@{
    var textSetting = Model.AdditionalSettings.FirstOrDefault(s => s.Key.Equals("SVT"));
    string widthTXT = (textSetting == null) ? null : textSetting.Value;
}
<input type="text" name="@Model.Name" id="@Model.Id" class="text"  maxlength="500"  

        value="@{if(!string.IsNullOrEmpty(widthTXT)){<text>@(widthTXT)</text>}else{<text>Unknown</text>}}"

    @{if(Model.Mandatory || Model.Validate){<text>data-val="true"</text>}}
    @{if (Model.Mandatory) {<text> data-val-required="@Model.RequiredErrorMessage"</text>}}
    @{if (Model.Validate) {<text> data-val-regex="@Model.InvalidErrorMessage" data-regex="@Model.Regex"</text>}}
/>

只显示&#34;未知&#34;在文本框中

再次感谢。

0 个答案:

没有答案