将复杂的Razor表达式传递给帮助者

时间:2015-01-06 15:55:33

标签: asp.net-mvc razor

你是否将一系列复杂的Razor传递给辅助参数?这是我能想到的最好的,但它不可能是正确的:

@helper Bold(MvcHtmlString fragment){
    <b>@fragment</b>
}

@*
helper containing the fragment, otherwise redundant
*@
@helper Status(){
    @Model.In@:/@Model.Total processed
}

@Bold(new MvcHtmlString(Status().ToHtmlString()))

编辑:我知道在大多数情况下,在ViewModel中最好完成Status

1 个答案:

答案 0 :(得分:0)

View Helpers本质上是静态的,无法访问页面模型,如果需要生成Status消息,最好在View-Model中进行:

public class MyViewModel
{
    public int In {get;set;}
    public int Total {get;set;}

    public string GetStatus()
    {
        return In + "/" + Total + " processed";
    }
}

你的助手看起来像是:

@helper Bold(string fragment){
    <b>@fragment</b>
}

用法:

@Bold(Model.GetStatus())

或者,您可以将InTotal作为参数传递给助手:

@helper Bold(string fragment){
    <b>@fragment</b>
}

@helper GetTotal(int _in, int _total)
{
    @_in @:/ @_total processed
}

用法:

@Bold(GetTotal(Model.In, Model.Total).ToString())