MVC使用上下文在数据库中查找记录

时间:2014-02-20 07:29:49

标签: javascript ajax asp.net-mvc controller

我的控制器中有ActionResult,我试图用AJAX.get调用,需要在数据库中查找记录并返回包含一些值的Json:

[HttpGet]
    public ActionResult GetBranchHead(int branchId = 0)// call this via jquery ajax
    {
        Staff branchHead = (Staff) (db.Staff.Where(o => o.BranchId == branchId && 
                                                        o.StaffTypeId == (int) Mars.Data.Enums.StaffType.BranchHead));

        return Json(new { BranchHeadId = branchHead.StaffId,
            BranchHeadName = branchHead.FirstName,
            BranchHeadSurname = branchHead.Surname },
            JsonRequestBehavior.AllowGet);
    }

我不确定是否需要将其转换为模型中的类型,或者这个db上下文是如何工作的。我应该使用find吗? BranchId和StaffTypeId都是外键。

现在我在razor页面上的javascript中调用此方法,如下所示:

<script type="text/javascript">
function CheckSelection() {
    var BranchHeadName;
    var BranchHeadSurname;
    var branchId = $(this).val();
    $.ajax({
        url: "GetBranchHead?branchId",
        type: "GET",
        data: 1, //$(this).val(),
        success: SetData(BranchHeadName, BranchHeadSurname),
        dataType: JSON
    });
};

function SetData(BranchHeadName, BranchHeadSurname) {
    $("#BranchHeadDisplay").val(BranchHeadName + " " + BranchHeadSurname); //= BranchHeadName + " " + BranchHeadSurname;

};

$(document).ready(function () {
    $("#SelectedBranch").change(CheckSelection);
    CheckSelection.apply($("#SelectedBranch"));
});

只要下拉框中的选项发生变化,就应该在我的控制器中调用ActionResult方法。 (我知道我仍然必须解决ajax函数,但我只是为了测试方法而在测试数据中进行硬编码)

我得到的是以下内部服务器错误:

  

无法将类型为'System.Data.Entity.Infrastructure.DbQuery`1 [Mars.Data.Staff]'的对象转换为'Mars.Data.Staff'。

这部分是我相信的问题:

Staff branchHead = (Staff) (db.Staff.Where(o => o.BranchId == branchId && o.StaffTypeId == (int) Mars.Data.Enums.StaffType.BranchHead));

4 个答案:

答案 0 :(得分:2)

将.single()添加到您的查询中以仅选择1条记录

答案 1 :(得分:1)

尝试:

var branchHead = db.Staff.FirstOrDefault(o => o.BranchId == branchId && o.StaffTypeId == (int) Mars.Data.Enums.StaffType.BranchHead);

答案 2 :(得分:1)

试试这个 -

var Query = db.Staff.Where(o => o.BranchId == branchId && o.StaffTypeId == (int) Mars.Data.Enums.StaffType.BranchHead).ToList();

if(Query.Any())
{
   Staff branchHead = Query[0];
}

答案 3 :(得分:1)

我会在下面的行上实现它。请注意,如果您返回JsonResult,它会自动将人员(查询)的集合转换为Json数据,您可以在成功函数中检索这些数据。

<强>控制器:

public JsonResult GetBranchHead(int branchId = 0)
    {
        var stafftypeid=(int)Mars.Data.Enums.StaffType.BranchHead);
        var query = db.Staff.Where(o => o.BranchId == branchId && o.StaffTypeId == stafftypeid).ToList();

        return Json(query,JsonRequestBehavior.AllowGet);
    }

<强> view.cshtml:

function CheckSelection() {
    var BranchHeadName;
    var BranchHeadSurname;
    var branchId = $(this).val();
    $.ajax({
        url: "yourcontroller/GetBranchHead",
        type: "GET",
        data: {branchId:$(this).val()},
        dataType: JSON,
        success: function(data){
         $("#BranchHeadDisplay").val(data.FirstName + " " + data.SurName);
        }       
    });
};