window.location.href将HttpContext.Current.Request.Path返回为“ /”

时间:2018-09-18 16:59:51

标签: c# jquery asp.net-mvc

我有一个过滤器,用于获取当前请求路径。在某些情况下,我使用了

<List id="list" growing="true" growingThreshold="20" growingScrollToLoad="true" showNoData="true" mode="{device>/listMode}"
                select="_handleSelect">
                <ObjectListItem id="MAIN_LIST_ITEM" type="{device>/listItemType}" press="_handleItemPress" title="{sName}">
                    <markers>
                        <ObjectMarker type="Flagged"/>
                    </markers>
                    <firstStatus>
                        <ObjectStatus text="{Status1Txt}"/>
                    </firstStatus>
                    <attributes>
                        <ObjectAttribute id="ATTR1" text="{SNumber}"/>
                        <ObjectAttribute id="ATTR2" text="{PTxt}"/>
                    </attributes>
                    <secondStatus>
                        <ObjectStatus text="{Status2Txt}"/>
                    </secondStatus>
                </ObjectListItem>
            </List>

通常window.location.href =@Url.Action("Action","Controller"). 返回HttpContext.Current.Request.Path,但是对于Controller/Action,它总是返回window.location.href。我可以使用"/"以外的其他地址进行重定向,以便检索正确的路径吗?

1 个答案:

答案 0 :(得分:0)

window.location.href需要一个JavaScript字符串,但是您的代码会呈现无效的JS,因为Url.Action(...)生成的URL既不包含撇号也不包括引号。

正确的代码应该是

window.location.href = '@Url.Action("Action","Controller")';

但是,我推荐HttpUtility.JavaScriptStringEncode作为完全故障安全的解决方案:

window.location.href = @HttpUtility.JavaScriptStringEncode(Url.Action("Action","Controller"), addDoubleQuotes: true);