2013-04-29 71 views
2

在我的MVC視圖內我有一個按鈕單擊執行的JavaScript。我試圖設置一個字符串到隨機設置的字符,我可以很好地工作,但是當我嘗試將該字符串設置爲JavaScript中的'randomchars'字符串時,我嘗試運行視圖時遇到NullReferenceException。在ASP.NET MVC的JavaScript函數中設置字符串給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。

回答

2

在頁面被傳送到客戶端(即web瀏覽器)之後執行javascript。您的剃鬚刀代碼在頁面發送到客戶端之前在服務器上執行。因此,您嘗試訪問Model.RString

爲了解決這個問題,您可以調用CreateRString在服務器上,也可以通過在成功回調響應集randomchars後的AJAX方法執行。

進一步解釋選項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在你調用它時在客戶端的瀏覽器中執行。

+1

感謝您的回覆,很遺憾,我無法在服務器上創建隨機字符串,因爲它需要是客戶端特定的。當你說我可以在成功回調中設置「randomchars」時 - 我該如何去做這件事?我所知的將'randomchars'設置爲'Model.RString'的唯一方法是使用'@(Model.RString)'的razor方法,該方法將盡早執行。 – benallansmith 2013-04-29 23:45:47

+1

如果需要特定於客戶端,則可以在服務器端使用C#GUID。如果您需要只能在瀏覽器中獲得的信息,那麼您需要使用javascript創建您的隨機數或通過發送一個將信息傳遞給控制器​​的ajax請求。但我想我可能不會理解你說的一切。 – 2013-04-29 23:57:39

+1

是的,這就是我所說的。由於您的洞察力,我現在可以開展工作。我用javascript創建了randomchars,見[這個問題](http://stackoverflow.com/questions/1349404/generate-a-string-of-5-random-characters-in-javascript)。然後我使用ajax'data:{'RString':RString}將控制器傳遞給控制器​​,允許我的控制器使用該字符串。 – benallansmith 2013-04-30 00:37:36