Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC“;品牌形象;按请求字符串?_C#_Html_Asp.net Mvc - Fatal编程技术网

C# MVC“;品牌形象;按请求字符串?

C# MVC“;品牌形象;按请求字符串?,c#,html,asp.net-mvc,C#,Html,Asp.net Mvc,在我的MVC应用程序中,我在以下位置有图像。这来自_Layout.cshtml: <a href="#"><img src="~/Content/app/images/logo-tlc.png" alt="TLC"></a> 我试图通过解析查询字符串来更改“品牌形象”,比如说pass“apl”表示动物星球。我尝试了以下内容,但不知道您是否可以使用这种concating字符串。它不起作用: <a href="#"><img src="~/

在我的MVC应用程序中,我在以下位置有图像。这来自_Layout.cshtml:

<a href="#"><img src="~/Content/app/images/logo-tlc.png" alt="TLC"></a>

我试图通过解析查询字符串来更改“品牌形象”,比如说pass“apl”表示动物星球。我尝试了以下内容,但不知道您是否可以使用这种concating字符串。它不起作用:

<a href="#"><img src="~/Content/app/images/logo-" + @Request["brand"] + ".png" alt=@Request["brand"]>

我怎样才能做到这一点

它现在正在渲染:

<
               <img src="/Content/app/images/logo-" + apl + ".png" alt=apl>
<

您不应该引用
查询字符串[]
集合吗?还可以使用HttpUtility.HtmlDecode()取消查询字符串的显示

<img src="~/Content/app/images/logo-@(HttpUtility.HtmlDecode(Request.QueryString["brand"])).png" alt=@(HttpUtility.HtmlDecode(Request.QueryString["brand"]))>

更好的答案是在控制器操作中收集品牌请求参数,并将其存储在会话中,或者构建一个了解品牌并指向正确url的特殊viewmodel。在视图中根据请求参数构建图像url的任何示例都将对XSS打开,或者在未传递参数时为空指针

public ActionResult Index( string brand ) {
    if (string.IsNullOrEmpty(brand)) {
        brand = "TLC"; 
    }
    Session["brand"] = brand;
    return View();
}
在你看来:

<img src="@string.format("~/Content/app/images/logo-{0}.png", Session["brand"])" alt="@Session["brand"]">`
`

这似乎对我不起作用,如果我使用一个查询字符串,如您需要转义字符,请使用
HttpUtility.HtmlDecode()
这些转义字符是什么?引用?你为什么需要它们?它们似乎不必要QueryString值不需要引号,它们应该
key=value&
用一个符号和分隔其他参数。你的例子是
key=“value”
,这是多余和不必要的;很抱歉,我仍然无法使用它。问题是,我不是在视图中执行此操作,而是在主视图布局中执行此操作。cshtmlI以前通过在基本控制器内创建一个OnActionExecuting筛选器解决了这种情况,然后我的所有控制器都会扩展该筛选器。通过这种方式,它可以为所有操作运行,并在需要时进行更改。我认为将参数移动到session不会增加任何值,您只需更改
Request.QueryString
session
。我同意添加一个模型属性来保存这个值更好,但是对于这个场景,session和querystring之间并没有真正的功能区别。此外,您还应该避免对这样的琐碎项目使用
会话
。如果参数不存在,则在参数周围添加null检查可以使视图不会崩溃。另外,让视图访问请求对象对我来说很讨厌,而且有点像是违反了MVC的理念。这感觉像是控制器的事情。它可能感觉恶心,但我的评论使用会话等。。这不是一个好的标准。您可以轻松创建一些
静态
帮助器类来处理空检查、默认值..我已经更新了我的答案。。。您不需要在querystring中用引号括起您的值。是的,我看到了问题所在,我已更新了我的答案…对于所有这些答案,请确保您仅在具有请求筛选的服务器中直接访问页面标记内的querystring。如果没有请求过滤,像下面所示的技术将为XSS攻击打开您的站点。