将C模型从视图传递到Javascript
我正在将此ViewModel传递到我的视图:将C模型从视图传递到Javascript,javascript,c#,asp.net-mvc,razor,model,Javascript,C#,Asp.net Mvc,Razor,Model,我正在将此ViewModel传递到我的视图: public class DashboardViewModel { public List<UserTask> UserTasks {get; set;} public List<WorkItem> WorkItems {get; set;} } 在this.value中传递的值不是对象,而是具有工作项命名空间的字符串 我还尝试了内联onclick函数: $(buttonEl).clic
public class DashboardViewModel
{
public List<UserTask> UserTasks {get; set;}
public List<WorkItem> WorkItems {get; set;}
}
在this.value中传递的值不是对象,而是具有工作项命名空间的字符串
我还尝试了内联onclick函数:
$(buttonEl).click(function () {
//code to open modal
var item = this.value;
});
<button onclick="openModal('@item')">UPDATE</button>
但结果是一样的
有什么想法吗?您应该存储用于循环到javascript变量的数据,并在单击按钮时查询这些数据。在按钮的数据属性上保留唯一标识符,以便以后查询。因为它是一个数组,所以可以简单地使用一个与js数组索引匹配的计数器变量
@{ var counter = 0;}
@foreach (var item in Model.WorkItems)
{
@item.Name
<button class="updateBtns" data-index="@counter">UPDATE</button>
counter++;
}
您应该存储用于循环到javascript变量的数据,并在单击按钮时查询该数据。在按钮的数据属性上保留唯一标识符,以便以后查询。因为它是一个数组,所以可以简单地使用一个与js数组索引匹配的计数器变量
@{ var counter = 0;}
@foreach (var item in Model.WorkItems)
{
@item.Name
<button class="updateBtns" data-index="@counter">UPDATE</button>
counter++;
}
我通常使用它将MVC转换为javascript
@Html.Raw(Json.Encode(item))
我通常使用它将MVC转换为javascript
@Html.Raw(Json.Encode(item))
@视图中的项将以普通字符串item.ToString打印该项。 我认为您需要将字符串解析为Javascript对象,对吗 一种方法是在模型中实现一个方法,比如JSON.stringify。该方法可以将C模型解析为JSON字符串:
{
"Name" : "Scott",
"HoursLogged" : "2"
}
然后可以使用JSON.parse将字符串解析为视图中的JSON对象。
在这种情况下,可以使用JSON对象。
一些想法:
C:
JS:
您还可以使用Newton将C模型字符串化。@item in View将该项作为普通字符串item.ToString打印出来。 我认为您需要将字符串解析为Javascript对象,对吗 一种方法是在模型中实现一个方法,比如JSON.stringify。该方法可以将C模型解析为JSON字符串:
{
"Name" : "Scott",
"HoursLogged" : "2"
}
然后可以使用JSON.parse将字符串解析为视图中的JSON对象。
在这种情况下,可以使用JSON对象。
一些想法:
C:
JS:
您还可以使用牛顿来严格化C模型。您可能需要后退几步才能理解这里发生了什么。一个web请求实际上只是一堆字符串,MVC.net做了一些事情来尝试并简化从使用对象到仅使用直字符串的转换,但正如您所看到的,它不能做所有事情。这样做的好处是,当在页面上呈现时,您可以像处理所有字符串一样处理这些内容 也就是说,有很多方法可以解决这个问题。如前所述,您可以将所有WorkItem对象转换为javascript对象,并将它们从javascript数组中取出。或者我个人喜欢做的就是简单地让按钮包含对象的id,然后进行ajax调用,从服务器获取最新的数据 后端:
[HttpPost]
public string GetWorkItemById(int id)
{
//get or create WorkItem here
WorkItem workItem = new WorkItem(id);
workItem.Name = "Foobar";
workItem.HoursLogged = "127001";
return Newtonsoft.Json.JsonConvert.SerializeObject(workItem);
}
前端:
$(buttonEl).click(function () {
var id = this.value; //assuming you store the id in the button's value
$.ajax({
type: "POST",
url: "@(Url.Action("GetWorkItemById"))",
data: ({
Id:id
}),
success: success,
dataType: dataType,
success: function(result){
var name = result.Name; // Foobar
var hoursLogged = result.HoursLogged; // 127001
//populate text fields using jquery
}
})
});
您可能应该后退几步来了解这里发生了什么。一个web请求实际上只是一堆字符串,MVC.net做了一些事情来尝试并简化从使用对象到仅使用直字符串的转换,但正如您所看到的,它不能做所有事情。这样做的好处是,当在页面上呈现时,您可以像处理所有字符串一样处理这些内容 也就是说,有很多方法可以解决这个问题。如前所述,您可以将所有WorkItem对象转换为javascript对象,并将它们从javascript数组中取出。或者我个人喜欢做的就是简单地让按钮包含对象的id,然后进行ajax调用,从服务器获取最新的数据 后端:
[HttpPost]
public string GetWorkItemById(int id)
{
//get or create WorkItem here
WorkItem workItem = new WorkItem(id);
workItem.Name = "Foobar";
workItem.HoursLogged = "127001";
return Newtonsoft.Json.JsonConvert.SerializeObject(workItem);
}
前端:
$(buttonEl).click(function () {
var id = this.value; //assuming you store the id in the button's value
$.ajax({
type: "POST",
url: "@(Url.Action("GetWorkItemById"))",
data: ({
Id:id
}),
success: success,
dataType: dataType,
success: function(result){
var name = result.Name; // Foobar
var hoursLogged = result.HoursLogged; // 127001
//populate text fields using jquery
}
})
});
对那正是我想要的。是的!这正是我要找的。可能的重复