Хранилище MVC и интерфейс, возвращающий Json - PullRequest
2 голосов
/ 02 декабря 2011

Я новичок в 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();

    }
}

Я получаю несколько ошибок.В UsersRepository.cs, где я возвращаю Json, ошибка говорит, что «имя Json не существует в текущем контексте».Ошибка в IUsers.cs заключается в том, что «Return_UserName_Dept () должен объявить тело, потому что оно не помечено как абстрактное ...».

Может кто-нибудь, пожалуйста, помогите мне с этим.Я просто не знаю, как это должно работать, и я пытаюсь изучить MVC, работая над этим приложением.Это на самом деле приложение FullCalendar, найденное здесь - ссылка на FullCalendar .Я пытаюсь превратить его в приложение MVC.


РЕДАКТИРОВАТЬ:

Может быть, мне нужно сделать это:

public JsonResult Return_UserName_Dept ()

вместо публичных пользователей Return_UserName_Dept ()

1 Ответ

0 голосов
/ 02 декабря 2011

Вы должны делать это на вашем контроллере каким-то методом, который возвращает действие json (jsonresult). Хранилище должно возвращать только ваши данные и все операции, которые вам нужно сделать, независимо от того, выполняете ли вы преобразование данных в json или какую-либо другую логику, должны выполняться на контроллере или в каком-то вспомогательном классе, который будет вызываться контроллером.

Edit:

Чтобы иметь метод, который возвращает JsonResult, вам нужно иметь ссылку на System.Web.Mvc.ActionResult, и поскольку хранилище обычно находится в модели, у вас не будет этой ссылки. Другое дело что вы, возможно, нарушаете свой дизайн, логика должна быть доступна на контроллере для того, что вы хотите

Редактировать 2:

Код ниже взят из старого поста, который вы можете увидеть здесь . Обратите внимание, как действие 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);
}
...