以下是我的模型属性
[Required(ErrorMessage = "Please Enter Short Desciption")]
[StringLength(200)]
public string ShortDescription { get; set; }
以下是我对应的查看代码
@Html.TextAreaFor(model => model.Product.ShortDescription, new { cols = "50%", rows = "3" })
@Html.ValidationMessageFor(model => model.Product.ShortDescription)
这就是它在浏览器中显示的方式,我想要的方式。
现在,由于存在bug in Microsoft's MVC3 release,我无法验证并且表单已提交并产生恼人的错误。
请告诉我解决方法或代替TextAreaFor可替换的任何代码。我不能使用EditorFor,因为有了它,我不能使用rows和cols参数。我想在浏览器中保持我的字段外观。让我知道在这种情况下应该做些什么
答案 0 :(得分:4)
在呈现此视图的控制器操作中,请确保已实例化依赖属性(在您的情况下为Product
),以使其不为空:
非工作示例:
public ActionResult Foo()
{
var model = new MyViewModel();
return View(model);
}
工作示例:
public ActionResult Foo()
{
var model = new MyViewModel
{
Product = new ProductViewModel()
};
return View(model);
}
另一种可能性(我推荐的那种)是使用[DataType]
属性来装饰您的视图模型属性,指示您将其显示为多行文本的意图:
[Required(ErrorMessage = "Please Enter Short Desciption")]
[StringLength(200)]
[DataType(DataType.MultilineText)]
public string ShortDescription { get; set; }
并在视图中使用EditorFor
帮助程序:
@Html.EditorFor(x => x.Product.ShortDescription)
就您在问题中表达的rows
和cols
参数而言,您可以简单地使用CSS来设置textarea的宽度和高度。例如,您可以将此textarea放在div或具有给定类名的内容中:
<div class="shortdesc">
@Html.EditorFor(x => x.Product.ShortDescription)
@Html.ValidationMessageFor(x => x.Product.ShortDescription)
</div>
并在CSS文件中定义其尺寸:
.shortdesc textarea {
width: 150px;
height: 350px;
}