Javascript C#单击时未定义razor对象

Javascript C#单击时未定义razor对象,javascript,c#,jquery,asp.net-mvc,razor,Javascript,C#,Jquery,Asp.net Mvc,Razor,我在index.cshtml中有以下代码,其中创建了FoursquareInfo对象 @using WebMatrix.Data; @using CanYouPay.Models.FoursquareAPI; @{ FoursquareInfo fsInfo = new FoursquareInfo(); Checkins response = new Checkins(); Checkin checkins = new Checkin(); List<Ro

我在index.cshtml中有以下代码,其中创建了FoursquareInfo对象

@using WebMatrix.Data;
@using CanYouPay.Models.FoursquareAPI;
@{
    FoursquareInfo fsInfo = new FoursquareInfo();
    Checkins response = new Checkins();
    Checkin checkins = new Checkin();
    List<RootItem> items = new List<RootItem>();
    RootItem item = new RootItem();
    Venue venue = new Venue();
    Location loc = new Location();
    loc.lat = 51.19189444478925;
    loc.lng = 4.664656084372357;

    venue.location = loc;
    item.venue = venue;
    items.Add(item);
    checkins.items = items;
    response.checkins = checkins;
    fsInfo.response = response;
}
我的
updateMap
函数是:

function updateMap(foursquareInfo) {
    var uluru = { lat: 20, lng: 30 };
    var map = new google.maps.Map(document.getElementById('googleMap'), {
        zoom: 4,
        center: uluru
    });
    var marker = new google.maps.Marker({
        position: uluru,
        map: map
    });
}
是的,出于测试目的,我不会对传递的
foursquareInfo
对象执行任何操作-当
onClick
事件发生时,当我可以修复收到的错误时,
lat
long
值将替换为
foursquareInfo
值:

在HTMLLevel上未定义CanYouPay。单击

我的html/razor/js代码有什么问题


根据我的评论:看起来你正试图将一个c#对象传递到你的js中-如果你在该按钮上查看源代码,它可能是一些文本,包括CanYouPay,由于你没有将其定义为js变量,它将抛出一个错误,你可能需要创建一个js对象并将你的c#对象值映射到它,或者穿过一串绳子

选项1创建一个与c#对象匹配的js对象,并在razor中映射值:


//这需要在onclick之前放在剃须刀中(所以在使用它之前创建对象)
var fsJSObject=新的fsJSObject();//此对象应与您的c#对象匹配
fsJSObject.StringValue='@fsInfo.StringValue';//这需要是最终值-例如字符串、int、date等-不能是另一个对象,否则会出现与上面类似的错误
fsJSObject.IntValue=@fsInfo.IntValue;
//将fsJSObject传递到onclick函数中
选项2,将值直接传递到函数中

onclick="updateMap('@fsInfo.StringValue', @fsInfo.IntValue, '@fsInfo.AnotherStringValue')"

根据我的评论,注意字符串值周围的引号:看起来您正试图将一个c#对象传递到js中-如果您在该按钮上查看源代码,它可能是一些文本,包括CanYouPay,并且由于您没有将其定义为js变量,它将抛出一个错误,您需要创建一个js对象并将c#对象值映射到它,或者传递一组字符串

选项1创建一个与c#对象匹配的js对象,并在razor中映射值:


//这需要在onclick之前放在剃须刀中(所以在使用它之前创建对象)
var fsJSObject=新的fsJSObject();//此对象应与您的c#对象匹配
fsJSObject.StringValue='@fsInfo.StringValue';//这需要是最终值-例如字符串、int、date等-不能是另一个对象,否则会出现与上面类似的错误
fsJSObject.IntValue=@fsInfo.IntValue;
//将fsJSObject传递到onclick函数中
选项2,将值直接传递到函数中

onclick="updateMap('@fsInfo.StringValue', @fsInfo.IntValue, '@fsInfo.AnotherStringValue')"

请注意字符串值周围的引号

当我尝试使用razor构建同一页面时,我发现我的页面中有以下内容:

<div id="mapBtn" onclick="updateMap(WebApplication1.Models.FoursquareInfo)" class="btn btn-success btn-lg col-md-2 pull-right">Show Map!< /div>
显示地图!
正如您所看到的,Razor将直接设置对象,即类名。在这种情况下,我建议在通话中直接设置位置号码,如:

<div id="mapBtn" onclick="updateMap(@loc.lat, @loc.lng)" class="btn btn-success btn-lg col-md-2 pull-right">Show Map!< /div>
显示地图!

然后在服务器端的调用中构建对象并对其执行所需操作。请记住,每次对服务器进行新调用时,都必须重新生成对象:这些对象不会保留在内存中。建议只将信息放在视图实际需要的视图中,而不是放在整个服务器端对象中。

当我尝试使用razor构建同一页面时,我发现我的页面中有以下内容:

<div id="mapBtn" onclick="updateMap(WebApplication1.Models.FoursquareInfo)" class="btn btn-success btn-lg col-md-2 pull-right">Show Map!< /div>
显示地图!
正如您所看到的,Razor将直接设置对象,即类名。在这种情况下,我建议在通话中直接设置位置号码,如:

<div id="mapBtn" onclick="updateMap(@loc.lat, @loc.lng)" class="btn btn-success btn-lg col-md-2 pull-right">Show Map!< /div>
显示地图!

然后在服务器端的调用中构建对象并对其执行所需操作。请记住,每次对服务器进行新调用时,都必须重新生成对象:这些对象不会保留在内存中。建议只将信息放在视图实际需要的视图中,而不是放在整个服务器端对象中。

很抱歉,我不知道单击方法会出现什么错误。看起来您正试图将c对象传递到js中-如果您在该按钮上查看源代码,它可能是一些文本,包括
CanYouPay
,由于您没有将其定义为js变量,它将抛出一个错误,您可能需要创建一个js对象并将您的c#object值映射到它,或者穿过一堆strings@Pete嗯,就是这样possible@Pete你知道如何实现吗?我会添加一个答案很抱歉,我不知道单击方法会出现什么错误。看起来你正试图将c#对象传递到js中-如果你在该按钮上查看源代码,它可能是一些文本,包括
CanYouPay
,由于您没有将其定义为js变量,它将抛出一个错误,您可能需要创建一个js对象并将您的c#object值映射到它,或者穿过一堆strings@Pete嗯,就是这样possible@Pete你知道如何实现这一点吗?我将添加一个应答器,使用JSON库将c#对象转换为JSON,这在JS中很容易处理,这可能是一个不错的选择。@Smut:另外,对于为什么这样做,当你执行
@fsInfo
时,它会调用
ToString
在该对象上获取可放入页面的字符串。如果您没有覆盖默认的
ToString
实现,它将输出类名,而我假设是
CanYouPay.Models.FoursquareAPI.FoursquareInfo
。JS当然会尝试将其视为一个JS表达式,从而得出结论,它找不到
CanYouPay
@Smut来处理chris的第一条评论我通常会安装newtonsoft json包,用于反序列化和序列化我的c到JS,使用json库将c对象转换为易于处理的jsonJS可能是一个不错的选择。@Smut:也适用于