2011-08-26 98 views
0

我必须为我正在处理的项目制作大量表单。每种形式都有大量的领域。是否有可能创建一个HTML助手,可以显示一个元素或编辑元素取决于某些变量?也许有人已经尝试过了。我能想象,这将是这样的:asp.net mvc剃须刀重用编辑器视图显示(与定制帮手)

@Html.EditOrDisplayFor(m=>m.Field, isReadonly) 

当它是只读的,只显示该变量,当它是不是显示了一个文本框。在这个帮手旁边,我需要一些如果在我的意见,但它可以节省几行100代码,如果这是可能的)

回答

3

刚刚找到一个替代(我觉得很巧妙的方法)来做到这一点:

public static MvcHtmlString EditOrDisplayFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> p,bool readOnly){ 
     if (readOnly){ 
      return new MvcHtmlString(string.Format("{0}", html.DisplayFor(p))); 
     } else{ 
      return new MvcHtmlString(string.Format("{0}", html.EditorFor(p))); 
     } 

    } 
1

你可以做两件事来帮助你在这里。

扩展方法

首先是编写扩展方法,使您可以构建一个输入框,您的要求,如:您现在可以根据你所描述的使用

public static class Extensions 
{ 
    public static string EditOrDisplayFor(this HtmlHelper helper, Field field, bool readOnly) 
    { 
     StringBuilder builder = new StringBuilder(); 
     if(readOnly) 
     { 
      builder.Append(field.Value); 
     } 
     else 
     { 
      builder.Append("<input type=\"text\" name=\"") 
        .Append(field.Name) 
        .Append("\" value=\"") 
        .Append(field.Value) 
        .Append("\" />"); 
     } 
     return helper.Raw(builder.ToString()); 
    } 
} 

部分景色

如果这些形式最终在它们之间具有共同的分组,你可能要考虑把这些共同的部分中的部分观点,以减少冗余布局代码。

+0

嗯,从来没有意识到它会这么容易。我想我使用这两个技巧,建立一些HtmlHelpers并使用部分视图。 – Patrick

+0

嗨,我尝试现在实现它,但我真的有一个Field变量的问题。在哪个命名空间中? – Patrick