如何在javascript代码中使用模型数据?

如何在javascript代码中使用模型数据?,javascript,asp.net-mvc,razor,Javascript,Asp.net Mvc,Razor,在我的视图(asp.net)代码中,我只是显示一组复选框。只要单击其中一个,就会调用以下java脚本代码(我在另一个stackoverflow问题中发现): 到目前为止还不错。代码按预期工作,调用我的SetRate操作方法传递正确的数据(即rate,它是复选框的值)。问题是,除了“rate”之外,我还需要传递一些其他数据,rate是视图的模型信息。然而,当我将代码行更改为以下内容时,javascript似乎完全停止工作: data: { SelectedRate: rate, S

在我的视图(asp.net)代码中,我只是显示一组复选框。只要单击其中一个,就会调用以下java脚本代码(我在另一个stackoverflow问题中发现):

到目前为止还不错。代码按预期工作,调用我的SetRate操作方法传递正确的数据(即rate,它是复选框的值)。问题是,除了“rate”之外,我还需要传递一些其他数据,rate是视图的模型信息。然而,当我将代码行更改为以下内容时,javascript似乎完全停止工作:

        data: { SelectedRate: rate, SomeOtherData:@Model.MyData},
我知道javascript在客户端运行,而razor在服务器端运行。但解决办法是什么?如何调用SetRate操作方法来传递正确的值

编辑:以下是我视图中的所有内容(除了几个其他javascript函数)

@使用Impoware.Models
@模型HomeViewModel
编辑2:我按照Shyju下面的建议更改了代码,它适用于主要数据类型(int、bool等),但是,当我尝试传入整个数据模型时,我得到了以下错误:

Newtonsoft.Json.Json.JsonSerializationException类型的异常在Newtonsoft.Json.dll中发生,但未在用户代码中处理

其他信息:检测到类型为“System.Data.Entity.DynamicProxies.UserParticipation_D381F3E084EC9A0B56FA60725061B956AEF865280516092D8BDE683C9A32725B”的自引用循环。路径“userParticipation.AspNetUser.UserParticipations”


UserParticipation是一个具有连接到AspNetUser的外键的类(多对1关系)。该模型是使用EntityFramework创建的。为什么会有一个用户参与的循环?哦,最后,我将传回整个模型数据,以便再次保存对数据库的一些访问,以便为返回到同一视图的访问重新检索相同的数据(如果有意义的话)。

您可以使用
jsonvert.SerializeObject
方法获取C#Model/Model属性的序列化字符串版本

这应该行得通

var myData = { SelectedRate: rate, 
     SomeOtherData: @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model.MyData)) };
console.log(myData);

 //Use myData variable for the ajax call now.
另外,因为它是一个复杂的js对象,所以应该将这个js对象字符串化,并在ajax调用中发送它。确保将
“application/json”
明确指定为
contentType
,以便模型绑定不会失败。您还可以考虑将HtpStAjax调用作为get使用QueSQL字符串来发送数据,QueQuy字符串限制了您可以发送多少数据(浏览器中的变化)


虽然这回答了您的问题,但您应该仔细检查为什么要将整个数据发送回?可能会发送一个唯一的Id,您的服务器方法将能够根据需要重新构建模型/特定数据

您是否希望这样更具动态性

<% foreach( var item in Model.Items )     { %>

<input type="checkbox" value="@item.value" onclick="RatingClicked(@item.value,@item.value2)   /> 

<% } %>



var RatingClicked = function (rate,otherValue) {
......


什么类型的数据是Model.MyData
?就一根绳子?int?能否添加调用onclick的视图代码以使其更清晰?MyData是一个自定义类,但为了确保我甚至尝试了一个简单的int,但仍然不起作用。
var myData = { SelectedRate: rate, 
     SomeOtherData: @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model.MyData)) };
console.log(myData);

 //Use myData variable for the ajax call now.
$.ajax({
        url: '@Url.Action("SetRate","Home")',
        type:'POST',
        data: JSON.stringify(myData),
        contentType : "application/json",        
        success: function (data) {
            //call is successfully completed and we got result in data

        },
        error: function (xhr, ajaxOptions, thrownError) {
            //some errror, some show err msg to user and log the error
            alert(xhr.responseText);

        }
});
<% foreach( var item in Model.Items )     { %>

<input type="checkbox" value="@item.value" onclick="RatingClicked(@item.value,@item.value2)   /> 

<% } %>



var RatingClicked = function (rate,otherValue) {
......