2

在我的 MVC 视图中,我有通过单击按钮执行的 javascript。我正在尝试将一个字符串设置为一组随机字符,我可以正常工作,但是当我尝试将该字符串设置为 javascript 中的“randomchars”字符串时,当我尝试运行视图时,我得到一个 NullReferenceException。

下面是代码片段,CreateRString 是模型参数(RString)设置为随机字符串的地方。

<script type="text/javascript">
    function showAndroidToast(toast) {

        var url = '@Url.Action("CreateRString", "Functions")';
        $.ajax({ url: url, success: function (response) { window.location.href = response.Url; }, type: 'POST', dataType: 'json' });

        var randomchars = '@(Model.RString)';
    }
</script>

语法是否正确?我不太确定为什么它会得到 NULL。

4

1 回答 1

2

将页面交付给客户端(即 Web 浏览器)后执行 javascript。您的剃须刀代码在页面发送到客户端之前在服务器上执行。因此,ajax方法会在你尝试访问后执行Model.RString

要解决此问题,您可以CreateRString在服务器上调用,也可以randomchars使用成功回调中的响应进行设置。

进一步解释选项 2。你可以这样做:

//Action Method that returns data which includes your random chars
public JsonResult CreateRString()
{
    var myRandomChars = "ABCDEF";
    return new JsonResult() { Data = new { RandomChars = myRandomChars } };
}

//The ajax request will receive json created in the CreateRString method which 
//contains the RandomChars
$.ajax({ url: url, success: function (response) { 
    var randomchars = response.Data.RandomChars;
    window.location.href = response.Url; 
}, type: 'POST', dataType: 'json' });

更具体地说,剃须刀首先在服务器上调用@Url.Action("CreateRString", "Functions")和执行。@(Model.RString)

然后showAndroidToast在您调用它时在客户端的浏览器中执行。

于 2013-04-29T23:33:46.230 回答