在Asp.net MVC Razor中替换TextAreaFor代码

时间:2012-01-04 06:41:13

标签: asp.net-mvc-3 razor unobtrusive-validation

以下是我的模型属性

[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)

这就是它在浏览器中显示的方式,我想要的方式。 enter image description here

现在,由于存在bug in Microsoft's MVC3 release,我无法验证并且表单已提交并产生恼人的错误。

请告诉我解决方法或代替TextAreaFor可替换的任何代码。我不能使用EditorFor,因为有了它,我不能使用rows和cols参数。我想在浏览器中保持我的字段外观。让我知道在这种情况下应该做些什么

1 个答案:

答案 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)

就您在问题中表达的rowscols参数而言,您可以简单地使用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;
}