mardi 14 juin 2016

Html.DescriptionFor rendering inside the previous <textarea/>

I have a <textarea /> that has the value of a property in my view model. The property is as follows:

[Display(Name="Description", Description="DescriptionOfDescription", ResourceType=typeof(Resources.Admin))]
public string Description { get; set; }

Notice the Display data attribute. This defines the display name and description of the property. With this, I should be able to set up my markup like so:

<div class="form-horizontal">
    <div class="form-group">
        @Html.LabelFor(x => x.Description, new { @class="control-label col-md-2" })
        <div class="col-md-10">
            <textarea data-bind="value: Description" />
            @Html.ValidationMessageFor(x => x.Description)
            @Html.DescriptionFor(x => x.Description)
        </div>
    </div>
</div>

The <textarea data-bind="value: Description"/> is using KnockoutJS to bind the value.

In my opinion this should and would work, but for some reason it doesn't. The HTML of @Html.DescriptionFor(x => x.Description) is being rendered within the value of the textarea, which I find very peculiar. I have no idea what's going on, and why it's behaving like this.

Here's an image of the web page. enter image description here

EDIT

Html.DescriptionFor()

public static class MvcHtmlHelpers
{
    public static MvcHtmlString DescriptionFor<TModel, TValue>(this HtmlHelper<TModel> self, Expression<Func<TModel, TValue>> expression)
    {
        var metadata = ModelMetadata.FromLambdaExpression(expression, self.ViewData);
        var description = metadata.Description;

        return MvcHtmlString.Create(string.Format(@"<p class='help-block'>{0}</p>", self.Encode(description)));
    }

    public static string DescriptionForRaw<TModel, TValue>(this HtmlHelper<TModel> self, Expression<Func<TModel, TValue>> expression)
    {
        var metadata = ModelMetadata.FromLambdaExpression(expression, self.ViewData);
        var description = metadata.Description;

        return description;
    }
}

Aucun commentaire:

Enregistrer un commentaire