c#扩展方法和属性

时间:2018-07-22 04:08:00

标签: c# asp.net-mvc devexpress

我正在将C#和MVC用于我的Web应用程序,并且我希望在编码时让生活变得轻松,所以我在视图中做了以下操作。我使用Devexpress。因此,为了减少视图中的编码,我执行了以下操作。

我创建了一个像这样的类:

public class EditorUtils
{ 
    public static void Label(HtmlHelper htmlHelper, string CssClass, Object Model, String DataField)
    {
        LabelSettings lbSettings = new LabelSettings
        {
            Text = Text,
            Width = Width
        };
        lbSettings.ControlStyle.CssClass = CssClass;
        htmlHelper.DevExpress().Label(lbSettings).Bind(DataBinder.Eval(Model, DataField)).GetHtml();
    }
}

这对我来说很容易,因为我现在只有一行代码可以在视图中呈现标签。

我这样使用它:

EditorUtils.Label(Html, "MyCssClass", Model, "FieldName1");
EditorUtils.Label(Html, "MyCssClass", Model, "FieldName2");

我喜欢通过将编辑器放在html表中来组织它们,并创建了一个像这样的类:

public class HtmlUtils
{
    public static void BeginTable(HtmlHelper htmlHelper)
    {
        htmlHelper.ViewContext.Writer.Write("<table>");
    }

    public static void NewRow(HtmlHelper htmlHelper)
    {
        htmlHelper.ViewContext.Writer.Write("<tr><td>");
    }

    public static void NewColumn(HtmlHelper htmlHelper, string CssClass)
    {
        htmlHelper.ViewContext.Writer.Write(string.Format("</td><td class=\"{0}\">", CssClass));
    }

    public static void EndRow(HtmlHelper htmlHelper)
    {
        htmlHelper.ViewContext.Writer.Write("</td></tr>");
    }

    public static void EndTable(HtmlHelper htmlHelper)
    {
        htmlHelper.ViewContext.Writer.Write("</table>");
    }       

}

我认为这样使用它。

HtmlUtils.BeginTable(Html);
HtmlUtils.NewRow(Html);
EditorUtils.Label(Html, "MyCssClass", Model, "FieldName1");    
HtmlUtils.NewColumn(Html);
EditorUtils.Label(Html, "MyCssClass", Model, "FieldName2");
HtmlUtils.EndRow(Html);
HtmlUtils.EndTable(Html);

这将导致一个具有1行和2列的值的表。

现在要点了。我想通过这样做来进一步优化它。

HtmlUtils.BeginTable(Html);

EditorUtils.Label(Html, "MyCssClass", Model, "FieldName1").NewRow(Html); //this will create a new row and column and put the lable inside the field
EditorUtils.Label(Html, "MyCssClass", Model, "FieldName2").NewColumn(Html); //this will create a new column and put the lableiside the field

HtmlUtils.EndTable(Html);

我非常努力地寻求解决方案,但迄今为止找不到。有人可以送我去正确的方向吗?

亲切的问候,

1 个答案:

答案 0 :(得分:1)

我只是在没有测试能力的情况下很快地编写了此代码。我希望它能对我有所帮助,因为我主要使用Web表单而不是MVC。

也可能需要查看以下页面。 (自从我使用它们已经有一段时间了,但是我怀疑它们比使用硬编码的字符串更好。) HtmlGenericControl Class Table Class

public static class HtmlUtilsExtensions
{
  public static HtmlHelper BeginTable(this HtmlHelper htmlHelper)
  {
    return htmlHelper.ViewContext.Writer.Write("<table>");
  }

  public static HtmlHelper NewRow(HtmlHelper htmlHelper)
  {
     return htmlHelper.ViewContext.Writer.Write("<tr><td>");
  }

   public static HtmlHelper NewColumn(HtmlHelper htmlHelper, string CssClass)
   {
    return htmlHelper.ViewContext.Writer.Write(string.Format("</td><td class=\"{0}\">", CssClass));
   }

   public static HtmlHelper EndRow(HtmlHelper htmlHelper)
   {
    return htmlHelper.ViewContext.Writer.Write("</td></tr>");
   }

   public static HtmlHelper EndTable(HtmlHelper htmlHelper)
  {
    return htmlHelper.ViewContext.Writer.Write("</table>");
  }       

}

那么你可以做这样的事情。

Html
.BeginTable()
.NewRow()
.Label(Html, "MyCssClass", Model, "FieldName1")
.NewColumn()
.Label(Html, "MyCssClass", Model, "FieldName2")
.EndRow()
.EndTable();


Html.BeginTable().NewRow()
.Label(Html, "MyCssClass", Model, "FieldName1")
.NewColumn()
.Label(Html, "MyCssClass", Model, "FieldName2")
.EndRow().EndTable();

请务必告诉我们您的情况:D