如何在多个显示模板中重用相同的代码?

时间:2017-03-20 21:12:51

标签: c# asp.net-mvc displayfor

我有2个显示模板,几行代码相同。

是否有办法将公共代码移动到另一个文件并在两个模板中引用该文件?

例如:

显示模板#1和#2具有以下公共代码:

IFormatProvider formatProvider = System.Globalization.CultureInfo.CurrentCulture;
string formattedCurrency = null;

if (formatProvider.ToString().Equals("en-US"))
{
    formattedCurrency = (@Model < 0 ? @Model.ToString("C", formatProvider) : (@Model).ToString("C", formatProvider));
}
else
{
    formattedCurrency = (@Model < 0 ? "- " + @Math.Abs(@Model).ToString("C", formatProvider) : (@Model).ToString("C", formatProvider));
}

如何将其移至单独的文件并从两个模板中引用它?

1 个答案:

答案 0 :(得分:0)

所以我的第一个选择是将formattedCurrency道具作为一个共同的功能:

public class LocalizedViewModel {
   private IFormatProvider formatProvider;
   public float Currency { get; set; }
   public string FormattedCurrency () {
     if (formatProvider.ToString().Equals("en-US"))
     {
         return  (this.Currency < 0 ? this.Currency.ToString("C", formatProvider) : (this.Currency).ToString("C", formatProvider));
     }
     else
     {
         return (this.Currency < 0 ? "- " + Math.Abs(this.Currency).ToString("C", formatProvider) : (this.Currency).ToString("C", formatProvider));
     }
   }
  public LocalizedViewModel () {
    formatProvider = System.Globalization.CultureInfo.CurrentCulture;
  }
}

然后从此基本模型继承ViewModel

public class MyModel1: LocalizedViewModel {
   public MyModel1() : base() {
   }
}

public class MyModel2: LocalizedViewModel {
   public MyModel2() : base() {
   }
}

然后,每次创建对象时,您都可以访问此道具:

var myModel = new Model1();
var myModel2 = new Model2();
myModel.Currency = 100;
myModel2.Currency = 200;

现在两个viewmodels都将在任何视图上显示formattedCurrency,而不需要任何额外的视图逻辑。希望这对您有所帮助,并且对您来说可能是一个可行的选择。

myModel.FormattedCurrency();
myModel2.FormattedCurrency();

在任何模板上渲染该属性。同样,这是实现相同结果的替代解决方案。但采用不同的方法。

此致