MVC Razor代码重用-可以重用此代码吗?

兰迪·明德

我有以下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替换为参数值。是否有可能做到这一点?如果可能的话,我宁愿不采取局部看法。

CodeNotFound

我希望能够做的是调用一个方法,并让该方法在我的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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

可以在多个查询中重用CQLinq代码吗?

来自分类Dev

可以在多个查询中重用CQLinq代码吗?

来自分类Dev

是否可以在Python中重用导入代码?

来自分类Dev

类的可重用代码

来自分类Dev

重用摩卡测试代码

来自分类Dev

重用JSP代码

来自分类Dev

重用页脚html代码

来自分类Dev

重用摩卡测试代码

来自分类Dev

重用JSP代码

来自分类Dev

如何重用drawRect代码?

来自分类Dev

打开PDF重用代码

来自分类Dev

可重用的 Angularjs 代码

来自分类Dev

可重用的MVC代码:处理linq表达式中的值类型

来自分类Dev

MVC 5通过重用EF生成的代码使用ViewModel进行编辑

来自分类Dev

通过重用EF生成的代码,使用ViewModel进行MVC 5编辑

来自分类Dev

如何以面向对象的方式重用此ViewController代码?

来自分类Dev

代码重用tsqlt / sql测试

来自分类Dev

在多个设置中重用代码

来自分类Dev

多个创建条件重用代码

来自分类Dev

如何重用Java代码块

来自分类Dev

代码重用tsqlt / sql测试

来自分类Dev

BitmapImage METRO重用WPF代码

来自分类Dev

如何重用Java代码块

来自分类Dev

c#代码重用性

来自分类Dev

使 JQuery 下拉代码可重用

来自分类Dev

在ASP.NET MVC中使用Razor创建可重用的HTML视图组件

来自分类Dev

可以缩短此代码块吗?

来自分类Dev

重用if语句中的代码。(函数在函数内部是不好的做法吗?)

来自分类Dev

C ++模板会帮助重用非常相似的代码吗?