使用AJAX、Knockout和JSON获取数据库记录

使用AJAX、Knockout和JSON获取数据库记录,ajax,json,entity-framework,asp.net-mvc-4,knockout.js,Ajax,Json,Entity Framework,Asp.net Mvc 4,Knockout.js,我对Knockout和Entity框架相当陌生,我有一个问题,就是我似乎无法通过使用Knockout的AJAX调用将任何JSON从mvc4控制器操作输出到html页面 该表包括字段Email和regsitionNumber,用于验证用户 如果用户存在于表格中,则其国家/地区将显示在屏幕上 探查器状态代码为200,即OK。有人能帮忙吗 HTML------ 行动----- 看起来您的绑定不正确 <table id="products1" data-bind="visible: Users()

我对Knockout和Entity框架相当陌生,我有一个问题,就是我似乎无法通过使用Knockout的AJAX调用将任何JSON从mvc4控制器操作输出到html页面

该表包括字段Email和regsitionNumber,用于验证用户

如果用户存在于表格中,则其国家/地区将显示在屏幕上

探查器状态代码为200,即OK。有人能帮忙吗

HTML------

行动-----


看起来您的绑定不正确

<table id="products1" data-bind="visible: Users().length > 0">
    <thead>
        <tr>
            <th>Country</th>
        </tr>
    </thead>
    <tbody data-bind="foreach: Users">
        <tr>
            <td data-bind="text: Country"></td>
        </tr>
    </tbody>
</table>

国家

User()。消息:TypeError:无法读取未定义的属性“length”;绑定值:可见:用户().length>0 ko.utils.extend.ParseBindings字符串ko.utils.extend.getBindings ko.DependentToServable.DisposeWhen Node被删除时评估即时ko.DependentToServable应用程序绑定内部应用程序绑定内部应用程序绑定内部应用程序绑定内部应用程序绑定内部应用程序绑定内部应用程序绑定内部应用程序绑定和内部应用程序绑定的后代(匿名函数)感谢Dean删除了该错误,但现在我得到了-未捕获错误:无法解析绑定。消息:ReferenceError:未定义国家;绑定值:text:Country您可以在浏览器中检查网络请求吗(在Chrome/FF中,按F12,那里应该有一个网络选项卡)并验证响应是否具有Country属性?啊,忽略它。看起来您的MVC方法正在返回一组内容。请将您的
。Where
更改为
。FirstOrDefault
。这不起作用,因为我仍然收到一个未定义的错误-User=(从db.Users中的u开始,其中u.Email.Equals(Email)和&u.RegistrationNumber.Equals(RegistrationNumber)选择u)。FirstOrDefault();我认为这是一个敲除绑定问题,但看不到在哪里
function UserViewModel() {

    //Make the self as 'this' reference
    var self = this;
    //Declare observable which will be bind with UI
    self.Name = ko.observable("Robbie");
    self.Email = ko.observable("rob@test.com");
    self.Occupation = ko.observable("Designer");
    self.Country = ko.observable("UK");
    self.RegistrationNumber = ko.observable("R009");
    self.UserDate = ko.observable("06-04-2014");

    var User = {
        Name: self.Name,
        Email: self.Email,
        Occupation: self.Occupation,
        Country: self.Country,
        RegistrationNumber: self.RegistrationNumber,
        UserDate: self.UserDate
    };

    self.User = ko.observable();  //user
    self.Users = ko.observableArray(); // list of users

    //Login
    self.login = function ()
    {
        alert("login");

        if (User.Email() != "" && User.RegistrationNumber() != "") {


            $.ajax({
                url: '/Admin/Login',
                cache: false,
                type: 'GET',
                contentType: 'application/json; charset=utf-8',
                data: ko.toJSON(User),
                success: function (data) {
                    self.Users.push(data);
                    $('#title').html(data.Email);
                }
            }).fail(
                function (xhr, textStatus, err) {
                    console.log('fail');
                    console.log(xhr.statusText);
                    console.log(textStatus);
                    console.log(err);
                });

        } else {
            alert('Please enter an email and registration number');
        }

    };


}
var viewModel = new UserViewModel();
ko.applyBindings(viewModel);
   public ActionResult Login(string Email, string RegistrationNumber)
        {

            var user = from s in db.Users
                              select s;

            user = user.Where(s => s.Email.ToUpper().Equals(Email.ToUpper())
                                                 && s.RegistrationNumber.ToUpper().Equals(RegistrationNumber.ToUpper())
                                                 );

            if (user == null)
            {
               return HttpNotFound(); 
            }
            return Json(user, JsonRequestBehavior.AllowGet);
        }
<table id="products1" data-bind="visible: Users().length > 0">
    <thead>
        <tr>
            <th>Country</th>
        </tr>
    </thead>
    <tbody data-bind="foreach: Users">
        <tr>
            <td data-bind="text: Country"></td>
        </tr>
    </tbody>
</table>