在控制器中添加检查

时间:2013-06-21 06:28:35

标签: asp.net asp.net-mvc-4

我的项目中有User类,并且具有UserRow模型(用于在视图中显示用户) 这是UserRow

using System;

namespace Argussite.SupplierServices.ViewModels
{
public class UserRow
  {
    public Guid Id { get; set; }
    public string FullName { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
    public int Status { get; set; }
    public int Role { get; set; }

    public Guid SupplierId { get; set; }
    public bool ActionsAllowed { get; set; }
    public bool MailResendRequired { get; set; }
  }
}

我需要在我的控制器中添加检查ActionsAllowed

    [HttpPost]
    public ActionResult Unlock(Guid id)
    {
        var user = Context.Users.Find(id);
        if (user == null)
        {
            return Json(CommandResult.Failure("User was not found. Please, refresh the grid and try again."));
        }

        var checkActionsAllowed = Context.Users.AsNoTracking()
                                         .Select(e => new UserRow
                                             {
                                                 Id = e.Id,
                                                 ActionsAllowed = e.ActionsAllowed
                                             };
        if (checkActionsAllowed == true)
        {
            user.Status = UserStatus.Active;
            return Json(CommandResult.Success(string.Format("User {0} has been unlocked.", user.FullName)));
        }
        else return;
    }

但我在ActionsAllowed = e.ActionsAllowed
时遇到错误 在else return;中 请帮我解决这个问题。

2 个答案:

答案 0 :(得分:1)

你有两个问题:

Context.Users.AsNoTracking()
    .Select(e => new UserRow
    {
         ActionsAllowed = e.ActionsAllowed
    };

返回对象列表,而不是单个对象。 您已经查询过上面的用户,所以我想您可以简单地写一下:

if (user.ActionsAllowed) {
    user.Status = UserStatus.Active;
    return Json(CommandResult.Success...);
}

第二个问题是return;声明。 您的方法返回一个动作结果,因此您必须返回一些内容。 例如

return Json(CommandResult.Failure(
     "ActionsAllowed = false"));

答案 1 :(得分:0)

第一个错误听起来像你User类没有提供ActionsAllowed布尔属性,而第二个错误发生是因为你需要从方法中返回某些东西被解释为ActionResult

修改

嗯,我第一次没有注意到这一点,但是这个:

var checkActionsAllowed = Context.Users.AsNoTracking()
                                 .Select(e => new UserRow
                                     {
                                         Id = e.Id,
                                         ActionsAllowed = e.ActionsAllowed
                                     };

接着是:

if (checkActionsAllowed == true)

毫无意义 - 你没有从Select方法返回布尔结果,而是返回IEnumerable。也许您应该在问题中添加User架构,以便更明显地了解您要完成的任务。