如何将带有变音符/特殊字符的viewModel字符串值传递给控制器​​操作

问题描述

我将viewmodel字符串值存储到JS变量中,以用于控制器动作,例如:

var info = '@Model.CompanyInfo';
window.location.href = "@Url.Action("ControllerAction","Controller")/?id=" + mId + &info=" + info;

控制器动作正常,但是当@Model.CompanyInfo包含变音符/特殊字符时,这些字符将被转换(例如,将ö转换为ö)。然后,控制器操作将无法接收var info中包含的整个字符串。似乎所有内容都丢失在第一个特殊字符/变音符的位置之后

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

如何将整个字符串传递给控制器​​?

解决方法

Html.Raw将保留给定字符,而encodeURIComponent会将其正确传递给控制器​​

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

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

enter image description here

如果由于某种原因您不喜欢Html.Raw方法,则可以使用自定义函数来处理德语字符。

    function replacer(message) {
        return message
            .replace(/&#220;/g,'\334')//Ü (Uppercase u with umlaut)
            .replace(/&#214;/g,'\326')//Ö (Uppercase o with umlaut)
            .replace(/&#196;/g,'\304')//Ä (Uppercase a with umlaut)
            .replace(/&#252;/g,'\374')//ü (Lowercase u with umlaut)
            .replace(/&#246;/g,'\366')//ö (Lowercase o with umlaut)
            .replace(/&#228;/g,'\344');//ä (Lowercase a with umlaut)
    
    }