我正在渲染这样一个普通的textarea:
@Html.TextAreaFor(x => x.Description)
我希望看到一个空的textarea,但这是我所看到的(我选择第一行使其更清晰):
<textarea class="form-control" cols="20" id="Description" name="Description" rows="2"> </textarea>
这是通过设计完成的吗?我可以改变这种行为吗?
解决方法
在看到你的问题之后,我研究了Google,看看@ Html.TextAreaFor中额外行背后的问题是什么.看一看.
有些文章与您的问题有关: –
http://www.peschuster.de/2011/11/new-line-bug-in-asp-net-mvcs-textarea-helper/
ASP.NET MVC Textarea HTML helper adding lines when using AntiXssLibrary
文章提出了TextAreaHelper类中的基本问题,它由@ Html.TextAreaFor使用.
private static MvcHtmlString TextAreaHelper(HtmlHelper htmlHelper,ModelMetadata modelMetadata,string name,IDictionary<string,object> rowsAndColumns,object> htmlAttributes) { // Some initialization here... TagBuilder tagBuilder = new TagBuilder("textarea"); // Some more logic... tagBuilder.SetInnerText(Environment.NewLine + attemptedValue); return tagBuilder.ToMvcHtmlString(TagRenderMode.normal); }
以上代码中的问题是
tagBuilder.SetInnerText(Environment.NewLine + attemptedValue);
这就是为什么@ Html.TextAreaFor的实际输出会是这样的,额外的行显示:
<textarea> This is the content...</textarea>
这个问题的解决方法是
第一种解决方法实现Javascript onLoad修复以从所有textareas中删除有问题的编码:
$("textarea").each(function () { $(this).val($(this).val().trim()); });
第2种解决方法创建自己的帮助程序,以在视图中呈现textarea标记
public static MvcHtmlString FixedTextAreaFor<TModel,TProperty>( this HtmlHelper<TModel> htmlHelper,Expression<Func<TModel,TProperty>> expression) { return new MvcHtmlString(htmlHelper.TextAreaFor(expression) .ToHtmlString() .Replace("> ",">" + Environment.NewLine)); }
这些文章还建议在MVC 4 Developer Preview中修复此问题!