Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将C模型从视图传递到Javascript_Javascript_C#_Asp.net Mvc_Razor_Model - Fatal编程技术网

将C模型从视图传递到Javascript

将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

我正在将此ViewModel传递到我的视图:

  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
          }
        })
    });

对那正是我想要的。是的!这正是我要找的。可能的重复