我正在渲染这样一个普通的textarea:
@Html.TextAreaFor(x => x.Description)
Run Code Online (Sandbox Code Playgroud)
我希望看到一个空的textarea,但这是我所看到的(我选择第一行使其更清晰):

我检查了生成的html,它包含开始和结束标记之间的换行符:
<textarea class="form-control" cols="20" id="Description" name="Description" rows="2">
</textarea>
Run Code Online (Sandbox Code Playgroud)
这是通过设计完成的吗?我可以改变这种行为吗?
在看到你的问题之后,我在Google上研究了看额外线路背后的问题@Html.TextAreaFor.看一看.
有些文章与您的问题有关: -
http://www.peschuster.de/2011/11/new-line-bug-in-asp-net-mvcs-textarea-helper/
ASP.NET MVC Textarea HTML帮助程序在使用AntiXssLibrary时添加行
文章建议在TextAreaHelper课堂上使用的基本问题@Html.TextAreaFor.
private static MvcHtmlString TextAreaHelper(HtmlHelper htmlHelper,
ModelMetadata modelMetadata, string name, IDictionary<string,
object> rowsAndColumns, IDictionary<string, object> htmlAttributes)
{
// Some initialization here...
TagBuilder tagBuilder = new TagBuilder("textarea");
// Some more logic...
tagBuilder.SetInnerText(Environment.NewLine + attemptedValue);
return tagBuilder.ToMvcHtmlString(TagRenderMode.Normal);
}
Run Code Online (Sandbox Code Playgroud)
以上代码中的问题是
tagBuilder.SetInnerText(Environment.NewLine + attemptedValue);
Run Code Online (Sandbox Code Playgroud)
这就是为什么实际输出@Html.TextAreaFor将是这样的,额外的线显示: -
<textarea> This is the content...</textarea>
Run Code Online (Sandbox Code Playgroud)
这个问题的解决方法是
第一种解决方法实现Javascript onLoad修复以从所有textareas中删除有问题的编码:
$("textarea").each(function () { $(this).val($(this).val().trim()); });
Run Code Online (Sandbox Code Playgroud)
第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));
}
Run Code Online (Sandbox Code Playgroud)
这些文章还建议在MVC 4 Developer Preview中修复此问题!
| 归档时间: |
|
| 查看次数: |
1898 次 |
| 最近记录: |