【问题标题】:MVC repository and interface returning JsonMVC 存储库和接口返回 Json
【发布时间】:2011-12-02 18:47:49
【问题描述】:

我是 MVC 的新手,无法让它工作。我基本上有一个Users 类、一个UserRepository 和一个IUser 接口。

这是我的代码:

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

    }
}

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

任何人都可以帮我解决这个问题。我只是不知道这应该如何工作,我正在尝试通过处理这个应用程序来学习 MVC。它实际上是在此处找到的 FullCalendar 应用程序 - link to FullCalendar。我正在尝试把它变成一个 MVC 应用程序。


编辑:

也许我需要这样做:

public JsonResult Return_UserName_Dept()

而不是公共用户 Return_UserName_Dept()

【问题讨论】:

  • 我对 Json 不熟悉,但看起来您的意思是 return new Json(... ?,即您遗漏了新关键字?
  • 您好,实际上应该是返回Json(...),因为它是一个方法,只是这个方法在他调用它的地方不可用。应该从控制器中的JsonResult 方法内部调用

标签: json model-view-controller design-patterns


【解决方案1】:

您应该在您的控制器上以某种返回 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);
}

【讨论】:

  • 我认为在 MVC 中控制器只接收来自模型的数据。除了获取数据并将其传递给我的视图之外,我认为让控制器做任何工作都不是一个好主意。
  • 哦,我明白了。我试图在我的存储库中添加引用并得到一个错误。您是说将其添加到控制器中。
  • 是的,控制器从模型接收数据,仅此而已..这就是模型应该做的所有事情,处理数据..所有逻辑应该发生在控制器上。 . 模型上发生的唯一逻辑应该与从源检索数据并填充模型对象有关.. 控制器从模型中获取数据并执行转换操作或您需要的任何操作.. 它可以使用其他对象根据您需要做的事情来隔离逻辑。
  • 我的意思是你应该让你的控制器调用存储库并获取模型,然后以 jsonresult 的形式返回;存储库不应该返回 json(这对我来说没有意义)。
  • 嗯...好的。也许我只是误解了整个 MVC 模式。我将尝试在控制器级别返回 Json。谢谢。
猜你喜欢
  • 1970-01-01
  • 2017-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-11
  • 2010-10-09
  • 1970-01-01
相关资源
最近更新 更多