現在、Umbraco バージョン 7.1.4 アセンブリ: 1.0.5261.28127 と Contour バージョン 3.0.26 を使用しています。
データベースから取得した情報を等高線フォームに入力しようとしていますが、ユーザー Cookie に依存しています (Cookie はデータベース内のレコードの主キーを保持しています)。
これを実装するために、Cookie を調べて db リクエストを作成し、テキスト ボックスに値 (ユーザー名/アドレス/など) を入力するカスタム フィールド タイプ (データ フィールドごとに 1 つずつ) を作成することを検討しています。 .
カスタム設定をコントロールに追加して、デザイン時に設定された値を表示することができましたが、実行時にその値を修正できないようです。
関連するコードがあれば喜んで投稿しますが、私の質問は. 私は間違った木を吠えていますか?これはこれを処理する最良の方法ですか、それとも機能しますか?
どんなポインタでも大歓迎です
ありがとう
編集
ありがとうティム、私は今、コントロールをレンダリングすることさえしないような方法でそれを壊すことができました(デバッグメッセージは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
ティムからのポインターのおかげで、ビューの読み込みを停止するエラーを修正できました。新しいビューは次のようになります。
@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>}}
/>
そして、テキストボックスに「不明」と表示されるだけです
再度、感謝します。