如何检查MVC视图中是否存在(CSS)文件

时间:2018-04-05 11:16:36

标签: css razor view asp.net-mvc-5

在我的布局视图(_Layout.cshtml)中,我需要使用css文件,具体取决于当前的客户端。如果客户端特定的css不存在,我需要使用默认的css。我目前有以下代码,但无法使其正常工作。我做错了什么?

<head>
    if (@System.IO.File.Exists("@ViewData['client_dir']/client.css") {
        <link href="@ViewData["client_dir"]/client.css" rel="stylesheet" type="text/css" />
    } else {
        <link href="/content/default.css" rel="stylesheet" type="text/css" />
    }
</head>

ViewData项的值为“/ Data / Client-1”。

结果html:

if (False {
    <link href="/Data/Client-2/client.css" rel="stylesheet" type="text/css" />
} else {
    <link href="/content/default.css" rel="stylesheet" type="text/css" />
}

我也试过这个:

@{
    if (System.IO.File.Exists("ViewData['client_dir']/client.css")) {
        <link href="@ViewData["client_dir"]/client.css" rel="stylesheet" type="text/css" />
    } else {
        <link href="/content/default.css" rel="stylesheet" type="text/css" />
    }
}

然后生成的html总是包含这个:

        <link href="/content/default.css" rel="stylesheet" type="text/css" />

所以我猜“@ViewData ['client_dir'] / client.css”还需要其他东西吗?

1 个答案:

答案 0 :(得分:0)

斯蒂芬,我解决了这个问题:

@{
    var cssFile = String.Format("{0}{1}", ViewData["client_dir"], "/css/client.css");
    var absolutePath = HttpContext.Current.Server.MapPath(cssFile);
    if (System.IO.File.Exists(absolutePath)) {
        <link href=@cssFile rel="stylesheet" type="text/css" />
    } else {
        <link href="/content/default.css" rel="stylesheet" type="text/css" />
    }
}