2016-01-13 62 views
1

我可以調用此任務。我似乎無法理解返回的內容。更少使用它。我只是想要一個True或False,所以我可以保存一個角色或不。調用任務並返回True或False MVC 6

public ActionResult Create([FromServices]IServiceProvider serviceProvider,string roleName) 
    { 

     ModelState.Clear(); 

     try 
     { 

     var doesit= DoesRoleExist(serviceProvider, roleName); 

      if (string.IsNullOrEmpty(roleName)) 
      { 
       throw new Exception("Invalid Role Name: Cannot be empty and must be unique"); 
      } 



      context.Roles.Add(new Microsoft.AspNet.Identity.EntityFramework.IdentityRole() 
      { 
       Name = roleName, 
       NormalizedName = roleName.ToUpper() 
      }); 

      context.SaveChanges(); 

      return RedirectToAction("Index"); 
     } 
     catch 
     { 
      ModelState.AddModelError(string.Empty, string.Format("{0}", "Unable to Create Role. ")); 
      return View(); 
     } 
    } 

我得到這個當我打破 「變種doesit = DoesRoleExist(的ServiceProvider,角色名)」

? doesit

編號= 2093,狀態= WaitingForActivation,方法= 「{NULL}」,結果= 「{尚未計算}」 AsyncState:空 CancellationPending:假 CreationOptions:無 異常:空 編號:2093 結果:假 狀態:WaitingForActivation

這裏的任務:

private async Task<bool> DoesRoleExist(IServiceProvider serviceProvider, string roleName) 
     { 

      bool result =false; 

      var RoleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>(); 

      result = await RoleManager.RoleExistsAsync(roleName); 
      return result; 
    } 

我t很有趣,但除了在ActionResult中放入If語句時遇到的「can not compare boolean using ===」,我還在上面的任務中看到「return result;」在「結果=等待RoleManager.RoleExistsAsync(roleName);」之後運行。去搞清楚。只是簡單的真或假是我所要求的和能夠比較布爾值來查看我是否想添加角色。

我想補充說我的context.Roles沒有「RoleExists」方法。 但是,由於某種原因,在異步任務中,我可以調用「.RoleExistsAsync」。

回答

0

像往常一樣,這個MVC的東西,我只是嘗試每一個隨機的複製和粘貼我能想到的。在通過This CodeProject item查看時,我注意到可以使ActionResult異步。思考這個可以讓我避免調用任務。我去做了這樣的事情:

[HttpPost] 
    public async Task<ActionResult> Create([FromServices]IServiceProvider serviceProvider,string roleName) 
    { 

var RoleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>(); 

try 
{ 

    bool result = await RoleManager.RoleExistsAsync(roleName); 

    //LEFT OUT STRING.EMPTY CHECK FOR BREVITY 
    //NOTICE HOW I GOT A BOOLEAN COMPARISON BELOW (OLD AS THE HILLS!) 
     if (result) 
     { 
      throw new Exception("This Role Name already exists"); 

     } 

//ADD ROLE HERE IF NOT EXISTS AND NOT EMPTY 

所以我希望我的狂野漫步會幫助別人。本質上,我不必處理RolesStore製作RoleManager的方式,我可以計算出異步並等待足夠使用MVC 6操作結果的內容。

我仍然對任何評論和做「簡單」(大聲笑)這樣的東西的方式。我很樂意把一個「接受的答案」交給一個足夠餓的人。