2012-11-15 342 views
2

我一直在试验MVC(昨天开始),并想知道是否可以创建我的“自定义控件”。MVC自定义编辑器

我有类似如下:

在我看来

@Html.EditorFor(model => model.UserName, "StringTemplate", new {LabelText = "Test" }) 

“自定义视图”,这是用来渲染控制

@model MvcApplication.Models.StringTemplate 

@Html.LabelFor(model => model.Field, ViewData["LabelText"].ToString()) 
@Html.TextBoxFor(model => model.Field) 

视图模型

public class RegisterModel 
{ 
    [Required] 
    public StringTemplate UserName { get; set; } 
} 

public class StringTemplate 
{ 
    [Required] 
    public string Field { get; set; } 

    public StringTemplate() 
    { 
     Field = String.Empty; 
    } 

    public StringTemplate(string field) 
    { 
     Field = field; 
    } 
} 

我想要做的是通过调用@ Html.EditorFor,使用StringTemplate并传递值LabelText。如何从视图“StringTemplate”中读取值“Test”?另外,有没有一种方法可以在“StringTemplate”视图中执行@ Html.ValidationMessageFor()?如果有任何教程或链接,可以帮助我解决这个

将不胜感激......

谢谢!

回答

4

我认为你让事情比他们需要的更难。您不必为要编辑的模板创建自定义类,只需使用字符串即可。

所以在你的模型:

public class RegisterModel 
{ 
    [Required] 
    public string UserName { get; set; } 
} 

而且你的模板会是这个样子(一定要命名为 “String.cshtml”):

@model System.String 

@Html.LabelFor(model => model, (string)ViewData["LabelText"]) 
@Html.TextBoxFor(model => model) 

然后在您的视图:

@Html.EditorFor(model => model.UserName, new {LabelText = "Test" }) 

关于ValidationMessageFor,也可以将它添加到您的模板中:

@Html.ValidationMessageFor(model => model) 
+0

谢谢,这完全回答我的问题! – user1484089