需要帮助来提供更好的HtmlHelper扩展方法

时间:2010-02-10 17:40:30

标签: asp.net-mvc html-helper

我继承了以下代码,我想知道我是否可以挑选你的大脑,看看是否有更好的方法来复制它。

继承了我们大部分部分输入视图的html

<% if (Html.IsInputReadOnly()) { %>
<td>
    Id
</td>
<td>
<%= Html.TextBox(
   "Id"
   , (Model == null ? null : Model.Id)
   , new { @readonly = "readonly", @disabled="disabled" }
 )%>
 <% } elseif (Html.IsInputDisplayable() == false) { %>
 <td></td>
 <td></td>
 <% } else { %>
 <td>Id</td>
 <td><%= Html.TextBox("Id")%>
  <%= Html.ValidationMessage("Id", "*")%>
 </td>
<%} %>

这是我的entension方法

public static bool IsInputReadOnly(this HtmlHelper helper)
{
    string actionName = ActionName(helper);

    // The Textbox should be read only on all pages except for the lookup page
    if (actionName.ToUpper().CompareTo("EDIT") == 0)
        return true;
    return false;
}

public static bool IsInputDisplayable(this HtmlHelper helper)
{
    string actionName = ActionName(helper);

    // The Textbox should be read only on all pages except for the lookup page
    if (actionName.ToUpper().CompareTo("CREATE") == 0)
        return true;
    return false;
}

提前致谢

3 个答案:

答案 0 :(得分:1)

您可以将所有逻辑包装到单个扩展方法中吗?

<%= Html.SmartDisplay("Id", (Model == null ? null : Model.Id))%> 

然后在扩展方法中,放入检查它是可显示还是只读的所有代码。如果您在所有页面和所有控件上都没有标准表格布局,这将无效,但如果您这样做,它可能会有效。

答案 1 :(得分:0)

我会将只读和可编辑部分分成2个单独的部分视图。将它留给控制器来决定应该呈现哪个视图。你不应该在你的观点中做出这些决定 - 他们应该是愚蠢的。

答案 2 :(得分:0)

如果你可以创建一个cutom ViewModel类,它有一个KeyValue对的集合,其中key = control name&amp; Value =该控件的HtmlAttributes,控制器可能能够设置这些属性。

在View上,您将直接将Ht​​mlAttribute绑定到控件。

没有尝试过,但可能有用......

HTH

编辑:KeyValue对HtmlAttributes可能是IsEditable,IsVisible等标志的集合,可以通过扩展方法在View上解释,以根据需要呈现HtmlAttributes,这样我们就不会将HTML部分混合到控制器中< / p>