Mvc4 Helper yazma

Merhaba arkadaşlar MVC de program yazan arkadaşların mutlaka bilmesi gereken konulardan birisi htmlHelperları kullanma ve yazmadır. Helper parametrelerini anlamak ve bunlara uygun kod yazmak için için c# bilginin üdt düzey olması gerekir. En azından generic kullanımı, dictonary<T,T> gibi yazım şekilleri bilmeniz gerekir.

Ben hızlı kod yazmak için bazen bu helperlarla uğraşmak can sıkıcı olabiliyor. Ben bazen direkt html kodları yazıyorum... Herşey için helper yazmak zor geliyor. Ben bu örenekte aşağıdaki gibi bbir çıktı veren bir helper yazmak istiyorum.

<input foo:message="Please enter a value." foo:required="true" id="UserName" name="UserName" type="text" value="">

Seneryo gereği input tagına burada foo isminde bir attiribute eklemesi yapmak istiyorum.

public class FooAttribute
{
    public bool Required { get; set; }
    public string Message { get; set; }
}

public static class FooHelper
{
    public static MvcHtmlString LegacyTextboxFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, FooAttribute fooAttributes)
    {
        var fieldName = ExpressionHelper.GetExpressionText(expression);
        var fullBindingName = html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(fieldName);
        var fieldId = TagBuilder.CreateSanitizedId(fullBindingName);

        var metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
        var value = metadata.Model;

        TagBuilder tag = new TagBuilder("input");
        tag.Attributes.Add("name", fullBindingName);
        tag.Attributes.Add("id", fieldId);
        tag.Attributes.Add("type", "text");
        tag.Attributes.Add("value", value == null ? "" : value.ToString());

        if (fooAttributes != null)
        {
            if (fooAttributes.Required) tag.Attributes.Add("foo:required", "true");
            if (!String.IsNullOrEmpty(fooAttributes.Message)) tag.Attributes.Add("foo:message", fooAttributes.Message);
        }
        return new MvcHtmlString(tag.ToString(TagRenderMode.SelfClosing));
    }
}

Artık aşağıdaki gibi bir kod yazdığım da tam da istediğim gibi bir kod çıktısını elde edebilmekteyim.. bir sonraki makalemizde görüşmek üzere hoşçakalıın..

 @Html.MyTextboxFor(model => model.UserName, new FooAttributes {Required=true, Message="Please enter a value." })

 

Add comment

The file '/Custom/Widgets/Calendar/widget.cshtml' does not exist.The file '/Custom/Widgets/Category list/widget.cshtml' does not exist.The file '/Custom/Widgets/Tag cloud/widget.cshtml' does not exist.The file '/Custom/Widgets/Page List/widget.cshtml' does not exist.The file '/Custom/Widgets/Month List/widget.cshtml' does not exist.