2016-08-25 9 views
0

学校向けに.netでMVCプロジェクトを作成し、このコードを使用して、特定の役割を果たす特定のユーザーにのみ表示します。私はロール「Begeleider」を持つユーザーでログインしますが、私は、NAVのボタンをクリックしたときに、私は私のCSHTMLにエラーが出る場合は、この作品特定の役割のビューの一部を表示し、ログインしていないユーザーからナビゲーションボタンを隠す

public ActionResult About() 
    { 
     if (User.IsInRole("Begeleider")) 
     { 
      var client = new WebClient(); 
      var jsonLeerlingen = client.DownloadString(new Uri("http://localhost:8080/projecten/api/leerlingen")); 
      var leerlingen = Newtonsoft.Json.JsonConvert.DeserializeObject<IEnumerable<Leerling>>(jsonLeerlingen); 
      ViewBag.Message = leerlingen; 
     } 
     return View(); 
    } 

。私はここでコードを呼び出してから論理的ですが、私は適切な役割でログインしていないときにはそれに到達できません。しかし、それをどうやって修正するのですか?

@{ 
ViewBag.Title = "Evaluaties"; 
var leerlingen = List<ASPNetMVCExtendingIdentity2Roles.Domain.Leerling>)ViewBag.Message; 
} 
<h2>@ViewBag.Title.</h2> 
<h4>Leerlingen</h4> 
<table> 
@foreach (var leerling in leerlingen) 
{ 
    <tr> 
     <td>@leerling.Naam</td> 
     <td>@leerling.Email</td> 
    </tr> 
} 
</table> 
<h4>Evaluaties</h4> 
@* Here shall be the same code as above but for a Leerling himself he'll only be able to see himself and his own Evaluation(Evaluatie), Haven't figuerd it out yet. *@ 

navはこれで、最後のliはログインしていないユーザーでは表示しないでください。

<div class="navbar-collapse collapse"> 
      <ul class="nav navbar-nav"> 
       <li>@Html.ActionLink("Home", "Index", "Home")</li> 
       <li>@Html.ActionLink("Roles", "Index", "Roles")</li> 
       <li>@Html.ActionLink("Evaluaties", "About", "Home")</li> 
      </ul> 
      @Html.Partial("_LoginPartial") 
     </div> 

答えて

1

、あなたがログインしているときだけリスト項目を見ることができます

<div class="navbar-collapse collapse"> 
      <ul class="nav navbar-nav"> 
       @if (Request.IsAuthenticated) 
       { 
        <li>@Html.ActionLink("Home", "Index", "Home")</li> 
        <li>@Html.ActionLink("Roles", "Index", "Roles")</li> 
        <li>@Html.ActionLink("Evaluaties", "About", "Home")</li> 
       } 
       else 
       { 
        <li>@Html.ActionLink("Home", "Index", "Home")</li> 
        <li>@Html.ActionLink("Roles", "Index", "Roles")</li> 
       } 

      </ul> 
      @Html.Partial("_LoginPartial") 
     </div> 
0

はアクションメソッドの許可属性を使用します。

//you may use it without role name: [Authorize] 
[Authorize(Roles = "Begeleider")] 
public ActionResult About() 
    { 
      var client = new WebClient(); 
      var jsonLeerlingen = client.DownloadString(new Uri("http://localhost:8080/projecten/api/leerlingen")); 
      var leerlingen = Newtonsoft.Json.JsonConvert.DeserializeObject<IEnumerable<Leerling>>(jsonLeerlingen); 
      ViewBag.Message = leerlingen; 

     return View(); 
    } 

あなたがいない役割を使用してユーザーのためのリンクを非表示にする場合:私はこのような答えを見つけ

if(User.IsInRole("Evaluaties")){ 
<li>@Html.ActionLink("Evaluaties", "About", "Home")</li> 
} 
+0

評価は役割ではありませんが、私はエラーが発生します。 _ App_Web_tdbnlmww.dllで 'System.NullReferenceException'型の例外が発生しましたが、ユーザコードで処理されませんでした。 追加情報: _ –

+0

あなたが送るものの最初の部分別の役割が別の見方をしているので、私はそれを使うことはできないと思っています。それは、1つのLeerlingと1つの評価だけで済むので、異なるlocalhostlinksこの私は今持っているものである。 'IF(User.IsInRole( "Begeleider")){ 上記と同じコード} (User.IsInRole( "Leerling"))であれば { と同じコードですが、後で変更されます } ' –

+0

は、あなたが2つまたは3つの文字を持っている場合は、私の.cshtmlに' if(User.IsInRole( "Evaluaties")){...を使用することはできません –

関連する問題