如何为KeyValuePair类型的属性创建自定义MVC3模板或HTML帮助器<string,string> </string,string>

时间:2011-12-07 17:12:03

标签: c# asp.net-mvc-3 html-helper

我有一个包含3个属性KeyValuePair

的模型
public class TestModel {
    public KeyValuePair<string,string> MyProperty{ get; set; }
}    

我的控制器代码如下,

 public ActionResult Index() {
     var model = new TestModel {MyProperty= new KeyValuePair<string, string>("Color", "Blue")};
     return View(model);
 }

如果我使用以下Razor代码,我的结果就不是我想要的了。

@model TestModel
@Html.LabelFor(m => m.MyProperty)
@Html.DisplayFor(m => m.MyProperty)

我的观点最终呈现:

myProperty的 键 颜色 值 蓝色

我想创建自己的帮助器或模板来覆盖此功能。我试图在Views \ Shared \ DisplayTemplates中创建一个自定义模板,如下所示,但它没有被选中。

@model KeyValuePair<string,string>
<label>This should show up</label>

感谢您提出任何意见/建议。

2 个答案:

答案 0 :(得分:2)

您应该可以使用模型中的UIHint Property来指定要使用的DisplayTemplate,例如:

public class TestModel 
{
    [UIHint("NameOfYourDisplayTemplate")]
    public KeyValuePair<string,string> MyProperty{ get; set; }
}  

在渲染MyProperty时,这将引用名为“NameOfYourDisplayTemplate”的DisplayTemplate视图。

答案 1 :(得分:1)

TestModel类中使用DataType属性修饰MyProperty属性,例如:

[DataType("KeyValuePair")]
public class TestModel {
    public KeyValuePair<string,string> MyProperty{ get; set; }
}

然后将您的视图创建为~/Views/Shared/DisplayTemplates/KeyValuePair.cshtml