我们目前正在使用Umbraco版本7.1.4程序集:1.0.5261.28127和Contour版本3.0.26
我尝试使用从数据库中提取的信息填充轮廓表单,但依赖于用户cookie(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;在文本框中
再次感谢。