Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.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
Jquery 使用KnockoutJS映射插件和MVC3创建基本网格_Jquery_Asp.net Mvc 3_Knockout.js - Fatal编程技术网

Jquery 使用KnockoutJS映射插件和MVC3创建基本网格

Jquery 使用KnockoutJS映射插件和MVC3创建基本网格,jquery,asp.net-mvc-3,knockout.js,Jquery,Asp.net Mvc 3,Knockout.js,我到处寻找,尝试了各种模式,但似乎我无法让它正常工作。有一次我让它工作时,有那么多的代码,我想必须有一个更简单的方法,现在它完全崩溃了。我的目标。。。了解如何使用KO映射和MVC加载网格的基本知识。。并可能使用一个表单来更新它。我找不到任何适合我的情况的例子。这就是我现在的处境 以下是我的行动: public JsonResult List() { var result = new JsonResult(); result.Data = _service.

我到处寻找,尝试了各种模式,但似乎我无法让它正常工作。有一次我让它工作时,有那么多的代码,我想必须有一个更简单的方法,现在它完全崩溃了。我的目标。。。了解如何使用KO映射和MVC加载网格的基本知识。。并可能使用一个表单来更新它。我找不到任何适合我的情况的例子。这就是我现在的处境

以下是我的行动:

public JsonResult List()
    {
        var result = new JsonResult();
        result.Data = _service.GetWeightStats();

        return Json(result, JsonRequestBehavior.AllowGet);
    }
这是我的班级:

public class WeightStat
{
    public int Id { get; set; }
    [Required]
    public double Weight { get; set; }
    public double? Neck { get; set; }
    public double? Chest { get; set; }
    public double? Bicept { get; set; }
    public double? Waist { get; set; }
    public double? Hip { get; set; }
    public double? Thigh { get; set; }
    public double? Calf { get; set; }
    [Required]
    public DateTime Date { get; set; }
    [Required]
    public string TimeOfDay { get; set; }
    [Required]
    public string DietBehavior { get; set; }

}
这是我的模板行:

<tbody data-bind='template: {name: "statRowTemplate", foreach: data.Data }'></tbody>
我现在假设我对这段代码完全错了,因为除了JSON字符串,我没有收到任何东西。我已经用很多不同的方式修改了代码,我已经为此工作了两周多,试图让它正常工作,所以如果有人能向我解释我做错了什么,请将我发送到knockoutjs网站示例,这些示例没有帮助。提前感谢您的帮助,避免我长出更多的白发:/

另外,还要加上。。我想使用一个朋友创建的mvcextension,我正在使用它,但我必须执行data.WeightStats之类的操作。。太沮丧了,看看吧

public static MvcHtmlString KnockoutForModel<TModel>(this AjaxHelper<TModel> helper, bool includeScriptTags = true, bool? applyKoBindings = null)
    {
        var serializer = new JavaScriptSerializer();

        var json = "var viewModel = ko.mapping.fromJS(" + serializer.Serialize(helper.ViewData.Model) + ");\r\n";

        if (applyKoBindings.GetValueOrDefault(includeScriptTags))
        {
            json += "ko.applyBindings(viewModel);\r\n";
        }

        if (includeScriptTags)
        {
            json = "<script type=\"text/javascript\">\r\n" + json + "</script>\r\n";
        }

        return MvcHtmlString.Create(json);
    }
public static MvcHtmlString KnockoutForModel(此AjaxHelper帮助程序,bool includeScriptTags=true,bool?applyKoBindings=null)
{
var serializer=新的JavaScriptSerializer();
var json=“var viewModel=ko.mapping.fromJS(“+serializer.Serialize(helper.ViewData.Model)+”);\r\n”;
if(applyKoBindings.GetValueOrDefault(includeScriptTags))
{
json+=“ko.applyBindings(viewModel);\r\n”;
}
如果(包括描述标签)
{
json=“\r\n”+json+”\r\n”;
}
返回MvcHtmlString.Create(json);
}

$。getJSON要求您传递回调以处理结果,因为请求是异步完成的。因此,您可能希望执行以下操作:

var viewModel = {};

$.getJSON('WeightTracker/List', function(result) {
    viewModel.stats = ko.mapping.fromJS(result.Data);
    ko.applyBindings(viewModel);
});
然后,基于上述内容,您的模板绑定将如下所示:

<tbody data-bind='template: {name: "statRowTemplate", foreach: stats }'></tbody>

因此,当您执行$.getJSON时,在回调中您将处理一个JavaScript对象,而不是JSON字符串


如果您还有其他问题,我们很乐意帮助您。

我的英雄!我一定会接受你的提议!我知道必须有一种比我所生产的更有效的方法,现在你已经向我解释过了,我要看看我是否能想出如何添加和保存。你的代码帮助我更好地理解了KO的工作原理。再次感谢大家!!!
public static MvcHtmlString KnockoutForModel<TModel>(this AjaxHelper<TModel> helper, bool includeScriptTags = true, bool? applyKoBindings = null)
    {
        var serializer = new JavaScriptSerializer();

        var json = "var viewModel = ko.mapping.fromJS(" + serializer.Serialize(helper.ViewData.Model) + ");\r\n";

        if (applyKoBindings.GetValueOrDefault(includeScriptTags))
        {
            json += "ko.applyBindings(viewModel);\r\n";
        }

        if (includeScriptTags)
        {
            json = "<script type=\"text/javascript\">\r\n" + json + "</script>\r\n";
        }

        return MvcHtmlString.Create(json);
    }
var viewModel = {};

$.getJSON('WeightTracker/List', function(result) {
    viewModel.stats = ko.mapping.fromJS(result.Data);
    ko.applyBindings(viewModel);
});
<tbody data-bind='template: {name: "statRowTemplate", foreach: stats }'></tbody>