问题描述
我将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>
如果由于某种原因您不喜欢Html.Raw
方法,则可以使用自定义函数来处理德语字符。
function replacer(message) {
return message
.replace(/Ü/g,'\334')//Ü (Uppercase u with umlaut)
.replace(/Ö/g,'\326')//Ö (Uppercase o with umlaut)
.replace(/Ä/g,'\304')//Ä (Uppercase a with umlaut)
.replace(/ü/g,'\374')//ü (Lowercase u with umlaut)
.replace(/ö/g,'\366')//ö (Lowercase o with umlaut)
.replace(/ä/g,'\344');//ä (Lowercase a with umlaut)
}