2011-12-02 33 views
2

我是MVC的新手,无法实现这个工作。我基本上有一个Users类,一个UserRepository和一个IUser接口。MVC存储库和接口返回Json

这是我的代码:

public class Users 
{ 

public string UserName { get; set; } 
public string Department { get; set; } 
public string UserType { get; set; } 


} 

public class UsersRepository : TimeAttendanceMVC.Models.IUsers 
{ 

    public Users Return_UserName_Dept() 
    { 
     Users U = new Users(); 
     List<Users> LoggedInUser = new List<Users>(); 

     U.UserName = "TestUser"; 
     U.Department = "Finance"; 
     U.UserType = "Administrator"; 

     LoggedInUser.Add(U); 

     //string json = JsonConvert.SerializeObject(LoggedInUser, Formatting.Indented); 
     //return json; 

     return Json(LoggedInUser.ToArray(), JsonRequestBehavior.AllowGet); 

    } 


} 

namespace TimeAttendanceMVC.Models 
{ 
    public class IUsers 
    { 
     List<Users> Return_UserName_Dept(); 

    } 
} 

有,我得到了一些错误。在UsersRepository.cs中,我返回Json,错误表示“名称Json在当前上下文中不存在”。来自IUsers.cs的错误是“Return_UserName_Dept()必须声明一个正文,因为它没有标记为抽象...”。

任何人都可以帮助我这个。我只是不知道这应该如何工作,我试图通过在这个应用程序上学习MVC。它实际上是在这里找到的FullCalendar应用程序 - link to FullCalendar。我试图把它变成一个MVC应用程序。


编辑:

也许我需要这样做:

公共JsonResult Return_UserName_Dept()

,而不是大众用户的Return_UserName_Dept()

+0

我不familar JSON的,但它看起来像你的意思是'返回新的JSON(...'?,即你留出了新的关键字? – AaronLS

+0

嗨,它实际上应该返回'JSON(。 ..)',因为这是一种方法,只是这个方法在他调用它的地方是不可用的。应该从控制器的'JsonResult'方法中调用 – MilkyWayJoe

回答

0

你应该做这个你的控制器在返回一个json动作(jsonresult)的某种方法中。存储库应该只返回你的数据以及你需要做的所有操作,无论你是将数据转换为json还是其他任何逻辑都应该发生在控制器或控制器将要调用的某个帮助类上..

编辑:

为了得到它返回一个JsonResult的方法,你需要有System.Web.Mvc.ActionResult而且由于仓库通常是在模型的参考,你不会有这样的参考..另一件事是,你可能会打破你的设计逻辑应该在控制器上你想要的

编辑2:

以下代码来自旧帖子,你可以看到here。注意如何行动PopulateDetails从资源库中获取用户对象和这一切库确实..实际的逻辑是这样的方法内发生的事情,比如填充UserModel类的休息,然后它返回JsonResult:

public JsonResult PopulateDetails(UserModel model) 
{ 
    UserResultModel userResultModel = new UserResultModel(); 
    if (String.IsNullOrEmpty(model.UserId)) 
    { 
     userResultModel.Message = "UserId can not be blank"; 
     return Json(userResultModel); 
    } 

    User user = _userRepository.GetUser(model.UserId); 

    if (user == null) 
    { 
     userResultModel.Message = String.Format("No UserId found for {0}", model.UserId); 
     return Json(userResultModel); 
    } 

    userResultModel.LastName = user.LastName; 
    userResultModel.FirstName = user.FirstName; 
    userResultModel.Message = String.Empty; //success message is empty in this case 

    return Json(userResultModel); 
} 
+0

我认为在MVC中控制器只接收来自Model的数据。我并不认为让控制者完成任何工作除了获取数据并将其传递给我的观点外,并不是一个好主意。 – MikeB55

+0

哦,我明白了。我试图在我的存储库中添加引用并出现错误。您正在说要将其添加到控制器中。 – MikeB55

+0

是的,控制器从模型接收数据,就是这样..这是所有模型应该做的,处理数据..所有的逻辑*应该*发生在控制器..模型中唯一发生的逻辑应该与从源检索数据并填充模型对象..控制器从模型中获取数据并执行转换操作或任何你需要的操作......并且它可以根据你需要做的事情使用其他对象来分离逻辑。 – MilkyWayJoe