2013-06-21 99 views
-1

我有类用户在我的项目,并有模型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; 
    } 

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

回答

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模式添加到你的问题中,以便更明显地表明你想要完成什么。

+0

是的,我有'UserRow'属性'ActionsAllowed',但没有它'User',但我不知道如何让用户使用ID在控制器检查。而在其他情况下,我什么也得不到。 – Heidel

+0

你不能只是返回一个操作方法 - 必须发送某种响应。一个简单的'return false'可能起作用,尽管我会想出一个更有意义的响应代码,或者抛出一个'HttpException'。请记住,您正在响应HTTP请求。 –

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")); 
+0

我不能使用'if(user.ActionsAllowed)',因为我在'UserRow'类中拥有属性'ActionsAllowed',但没有'User'。我需要使用用户的ID,但我不知道如何做到这一点。 – Heidel

+0

你想从哪里查询用户行?你查询Context.Users,我猜是那种类型的用户,对吧?然后你写了'e.ActionsAllowed',所以来自User类。 – Jan

+0

我不知道如何从UserRow获得属性ActionsAllowed与用户的ID! – Heidel