C# 如何将带有umlauts/特殊字符的viewModel字符串值传递给控制器操作

C# 如何将带有umlauts/特殊字符的viewModel字符串值传递给控制器操作,c#,jquery,asp.net-mvc,razor-pages,C#,Jquery,Asp.net Mvc,Razor Pages,我将ViewModel字符串值存储到JS变量中,以便在控制器操作中使用,例如: var info = '@Model.CompanyInfo'; window.location.href = "@Url.Action("ControllerAction", "Controller")/?id=" + mId + &info=" + info; 但是,当@Model.CompanyInfo包含umlauts/特殊字符时

我将ViewModel字符串值存储到JS变量中,以便在控制器操作中使用,例如:

var info = '@Model.CompanyInfo';
window.location.href = "@Url.Action("ControllerAction", "Controller")/?id=" + mId + &info=" + info;
但是,当
@Model.CompanyInfo
包含umlauts/特殊字符时,控制器操作可以正常工作,这些字符将被转换(例如ö被转换为
ö;
)。然后控制器操作不接收
var info
中包含的整个字符串。看起来在第一个特殊字符/umlaut的位置后面,一切都丢失了

我试图对字符串进行编码/解码,但无法使其正常工作


如何将整个字符串传递给控制器?
Html.Raw
将保留给定字符,而
encodeURIComponent
将正确地传递给控制器

@{
    var umlaut = "ö";
}
<script>
    var umlautStr = '@Html.Raw(umlaut)';
    console.log(umlautStr);

    window.location = '/home/index?q=' + encodeURIComponent(umlautStr);
</script>

但是,不适用于&。同样,字符串在处被截断&您确实需要小心使用@Html.Raw-如果您的
CompanyInfo
在任何时候都被用户输入,他们可能会输入奇怪的内容,例如
;location.href=”https://stackoverflow.com/“//
-使用上面的代码,每次有人试图查看您的公司信息页面时,他们都会这样做…@Yegor:在我的情况下,似乎不需要encodeURIComponent。而且它不能解决&@freedomn-m的问题:CompanyInfo不是来自用户输入。我认为在我的情况下使用它是节省的。@Manu'&'字符对我来说非常适合
encodeURIComponent
-它被转换成%26