2013-08-28 2 views
0

면도기를 사용하여 Contour (3.0.14)에서 사용자 정의 필드 유형을 만들려고합니다. Width 속성을 추가 한 CustomTextfield이라는 새 클래스를 만든 다음 Fieldtype.customtextfield.cshtml이라는 새보기를 ~/umbraco/Plugins/umbracoContour/Views으로 만들었습니다. 내가 알아야 할 것 : 사용자 정의보기에서 Width 속성에 액세스하려면 어떻게해야합니까?사용자 정의 필드 유형 작성 : 사용자 정의 속성을 어떻게 렌더링합니까?

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"; 
     } 

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

     [Umbraco.Forms.Core.Attributes.Setting("Width", description = "Enter the width of the Textfield")] 
     public string Width { get; set; } 

     public override WebControl Editor { 
      get { 
       tb.TextMode = System.Web.UI.WebControls.TextBoxMode.SingleLine; 
       tb.CssClass = "text"; 
       if (!string.IsNullOrEmpty(this.Width)) { 
        int width; 
        if (Int32.TryParse(this.Width, out width)) { 
         tb.Width = width; 
        } 
       } 
       if (_value.Count > 0) 
        tb.Text = _value[0].ToString(); 

       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\" style=\"" + this.Width + "px\" />"; 
     } 

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

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

    } 
} 

Fieldtype.customtextfield.cshtml :

@model Umbraco.Forms.Mvc.Models.FieldViewModel 
<input type="text" name="@Model.Name" id="@Model.Id" class="text" value="@Model.Value" maxlength="500" 
style="@{if(!string.IsNullOrEmpty(Model.Width)){<text>width:@(Model.Width)px; </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>}} 
/> 

작동하지 않는 뷰의 코드 내가 노력하고 있기 때문에

CustomTextfield.cs : 여기

내 코드입니다 존재하지 않는 Width 속성을 참조하십시오. 면도기를 사용하여 사용자 지정 속성이있는 사용자 지정 필드 형식의 예제를 찾을 수 없습니다. 누군가가 올바른 방향으로 나를 가리킬 수 있다면, 나는 감사 할 것입니다.

답변

1

해결책을 찾았습니다.

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

    style="@{if(!string.IsNullOrEmpty(width)){<text>width:@(width)px; </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>}} 
/> 
: FieldViewModel 내 위의 예제가 작동하도록하기 위해 문자열 KeyValue

구성 유형 List<FieldSettingViewModel>의 인 AdditionalSettings 속성이 밝혀, 나는 다음을 사용할 수 있습니다