我有以下Razor代码片段,可能存在于15个不同的页面中,如果可能,我想重用它们:
<div class="col-xs-12">
@if (@Model.Rating == 0)
{
<img src="/Images/Rating/NoRating.jpg" alt="" width="125">
}
else if (@Model.Rating == 1)
{
<img src="/Images/Rating/One.jpg" alt="" width="125">
}
else if (@Model.Rating == 2)
{
<img src="/Images/Rating/Two.jpg" alt="" width="125">
}
else if (@Model.Rating == 3)
{
<img src="/Images/Rating/Three.jpg" alt="" width="125">
}
else if (@Model.Rating == 4)
{
<img src="/Images/Rating/Four.jpg" alt="" width="125">
}
else if (@Model.Rating == 5)
{
<img src="/Images/Rating/Five.jpg" alt="" width="125">
}
</div>
我希望能够做的是调用一个方法,并让该方法在我的Razor .cshtml文件中有此代码的地方返回此代码。该方法还必须接受一个参数。在这种情况下,参数的额定值为0到5之间。然后,我将所有出现的@ Model.Rating替换为参数值。是否有可能做到这一点?如果可能的话,我宁愿不采取局部看法。
我希望能够做的是调用一个方法,并让该方法在我的Razor .cshtml文件中有此代码的地方返回此代码。该方法还必须接受一个参数。在这种情况下,参数的额定值为0到5之间。然后,我将所有出现的@ Model.Rating替换为参数值。是否有可能做到这一点?
解决方案1:
您可以创建一个HtmlHelper
此类的扩展方法:
public static class RatingExtensions
{
public static MvcHtmlString Rating(this HtmlHelper helper, short rating)
{
var imageSrc = "/Images/Rating/";
switch (rating)
{
case 0:
imageSrc += "NoRating.jpg";
break;
case 1:
imageSrc += "One.jpg";
break;
// And so on....
default:
throw new IndexOutOfRangeException(string.Format("The following rating: {0} is not expected.",
rating));
}
return new MvcHtmlString(String.Format("<img src='{0}' alt='' width='125' />", imageSrc));
}
}
将扩展方法的名称空间导入视图后,在视图中,您可以通过编写以下行来调用扩展方法:
@Html.Rating(Model.Rating)
解决方案2:
只需创建一个局部视图,然后将其放入“视图”文件夹的“共享”子文件夹中即可。让我们将其命名为_Ratring.cshtml。该文件的内容如下(Notice @model指令,其short
类型为):
@model short
@{
var imageSrc = "/Images/Rating/";
switch (Model)
{
case 0:
imageSrc += "NoRating.jpg";
break;
case 1:
imageSrc += "One.jpg";
break;
// And so on....
default:
throw new IndexOutOfRangeException(string.Format("The following rating: {0} is not expected.",
Model));
}
}
<div class="col-xs-12">
<img src="@imageSrc" alt="" width="125">
</div>
您可以通过调用Html.RenderPartial
方法liek this在视图中使用此解决方案:
@{
Html.RenderPartial("_Rating", Model.Rating);
}
解决方案1更好,因为您可以在自己的装配项目中移动扩展方法,并将其用于多个项目。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句