在view(cshtml)中的JavaScript中使用Razor语法是否可行或有解决方法?
我正在尝试将标记添加到Google地图中...例如,我试过这个,但是我收到了大量的编译错误:
<script type="text/javascript">
// Some JavaScript code here to display map, etc.
// Now add markers
@foreach (var item in Model) {
var markerlatLng = new google.maps.LatLng(@(Model.Latitude), @(Model.Longitude));
var title = '@(Model.Title)';
var description = '@(Model.Description)';
var contentString = '<h3>' + title + '</h3>' + '<p>' + description + '</p>'
var infowindow = new google.maps.InfoWindow({
content: contentString
});
var marker = new google.maps.Marker({
position: latLng,
title: title,
map: map,
draggable: false
});
google.maps.event.addListener(marker, 'click', function () { …Run Code Online (Sandbox Code Playgroud) 我是.NET新手的Java开发人员.我正在开发.Net MVC2项目,我希望有一个局部视图来包装一个小部件.每个JS小部件对象都有一个JSON数据对象,该对象将由模型数据填充.然后,更新此数据的方法绑定到在窗口小部件中更改数据时的事件,或者如果在另一个窗口小部件中更改了该数据.代码是这样的.
myController的
virtual public ActionResult DisplaySomeWidget(int id) {
SomeModelView returnData = someDataMapper.getbyid(1);
return View(myview, returnData);
}
Run Code Online (Sandbox Code Playgroud)
myview.ascx
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<SomeModelView>" %>
<script type="text/javascript">
//creates base widget object;
var thisWidgetName = new Widget();
thisWidgetName.updateTable = function() {
// UpdatesData
};
$(document).ready(function () {
thisWidgetName.data = <% converttoJSON(model) %>
$(document).bind('DATA_CHANGED', thisWidgetName.updateTable());
});
</script>
<div><%:model.name%></div>
Run Code Online (Sandbox Code Playgroud)
我不知道的是如何通过SomeModelView发送数据,然后能够使用它来填充小部件以及将其转换为Json.我似乎有一些真正简单的方法在控制器中执行它而不是在视图中.我认为这是一个基本问题,我已经花了几个小时试图制作这个光滑的.
我们的客户希望在浏览器中显示日期和时间值,就像它们在数据库中一样,我们将它们作为UTC存储在数据库中.
起初我们在序列化和Javascript方面遇到了一些问题.DateTime值被移动了两次 - 首先匹配机器的本地时区,然后匹配浏览器中的时区.我们通过向JavaScriptSerializer添加自定义转换器来修复它.我们在Serialize覆盖中将DateTime标记为DateTimeKind.Utc.从Serialize中提取数据有点困难,但是我们发现了一些Uri hack,这有助于在相同的JavaScriptSerializer/Date(286769410010)/格式中返回DateTime值,但没有转移到本地时间.在Javascript方面,我们修补了KendoUI JS库来偏移构造的Date()对象,使它们看起来好像是UTC.
然后我们开始在另一方面工作,反序列化.同样,我们必须调整我们的代码以使用自定义stringify而不是JSON.stringify,这会在从本地时间转换为UTC时再次抵消数据.到目前为止,一切似乎都很好.
但看看这个测试:
public void DeserialiseDatesTest()
{
var dateExpected = new DateTime(1979, 2, 2,
2, 10, 10, 10, DateTimeKind.Utc);
// this how the Dates look like after serializing
// anothe issue, unrelated to the core problem, is that the "\" might get stripped out when dates come back from the browser
// so I have to add missing "\" or else Deserialize will break
string s = "\"\\/Date(286769410010)\\/\"";
// this get deserialized to UTC date …Run Code Online (Sandbox Code Playgroud) 我是asp.net MVC4的新手,请耐心等待.
我有一个控制器,它返回一个模型的ActionResult.我可以通过Razor使用这个模型,但我想在JavaScript中使用它.这是我根据互联网上的一些答案试图做的事情:
@{
var property = Model;
}
var prop = @(property);
var data= @Html.Raw(Json.Encode(prop ));
Run Code Online (Sandbox Code Playgroud)
但它不起作用.为了将我的模型传递给JavaScript,我需要做什么?
我将此ViewModel传递给我的视图:
public class DashboardViewModel
{
public List<UserTask> UserTasks {get; set;}
public List<WorkItem> WorkItems {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
从视图中,我像这样遍历WorkItems:
@foreach (var item in Model.WorkItems)
{
@item.Name
@item.HoursLogged
<button value="@item">UPDATE</button>
}
Run Code Online (Sandbox Code Playgroud)
当我单击按钮时,jQuery函数正在打开模式。
我需要将该项目传递给模式,以显示所有项目信息。
这是javascript函数:
$(buttonEl).click(function () {
//code to open modal
var item = this.value;
});
Run Code Online (Sandbox Code Playgroud)
在“ this.value”中传递的值不是对象,而是带有WorkItem命名空间的字符串。
我也尝试使用内联onclick函数:
<button onclick="openModal('@item')">UPDATE</button>
Run Code Online (Sandbox Code Playgroud)
但结果相同。
任何的想法?