2016-05-05 5 views
0

私のシステムではユーザが注文することができます。これらの注文を編集できるようにしたいと思いますが、この編集に注文ステータス変数を追加する予定ですどのように私はそれを作ることができるようにスタッフだけがこれを見ることができます。私は(@ifを使用してViewContext.HttpContext.User.IsInRoleを試してみましたが、これは動作していないようでした。特定のユーザタイプだけが編集ビューのフィールドを見ることを許可します

編集方法

// GET: Orders/Edit/5 
     public ActionResult Edit(int? id) 
     { 
      if (id == null) 
      { 
       return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
      } 
      CustomerOrder order = db.CustomerOrders.Find(id); 
      if (order == null) 
      { 
       return HttpNotFound(); 
      } 
      return View(order); 
     } 

      // POST: Orders/Edit/5 
     [HttpPost] 
     [ValidateAntiForgeryToken] 
     public ActionResult Edit(CustomerOrder order) 
     { 
      if (ModelState.IsValid) 
      { 
       db.Entry(order).State = EntityState.Modified; 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 
      return View(order); 
     } 

編集ビュー

@model bob.Models.CustomerOrder 
@{ 
    ViewBag.Title = "Edit"; 
} 
<h2>Edit</h2> 

@using (Html.BeginForm()) 
{ 
    @Html.AntiForgeryToken() 

    <div class="form-horizontal"> 

     <h4>Order</h4> 
     <hr /> 
     @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
     @Html.HiddenFor(model => model.Id) 
     <div class="form-group"> 
      @Html.LabelFor(model => model.FirstName, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.FirstName, new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.FirstName, "", new { @class = "text-danger" }) 
      </div> 
     </div> 
     <div class="form-group"> 
      @Html.LabelFor(model => model.LastName, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.LastName, new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.LastName, "", new { @class = "text-danger" }) 
      </div> 
     </div> 
     <div class="form-group"> 
      @Html.LabelFor(model => model.Address, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.Address, new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.Address, "", new { @class = "text-danger" }) 
      </div> 
     </div> 
     <div class="form-group"> 
      @Html.LabelFor(model => model.City, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.City, new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.City, "", new { @class = "text-danger" }) 
      </div> 
     </div> 
     <div class="form-group"> 
      @Html.LabelFor(model => model.State, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.State, new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.State, "", new { @class = "text-danger" }) 
      </div> 
     </div> 
     <div class="form-group"> 
      @Html.LabelFor(model => model.PostalCode, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.PostalCode, new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.PostalCode, "", new { @class = "text-danger" }) 
      </div> 
     </div> 
     <div class="form-group"> 
      @Html.LabelFor(model => model.Country, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.Country, new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.Country, "", new { @class = "text-danger" }) 
      </div> 
     </div> 
     <div class="form-group"> 
      @Html.LabelFor(model => model.Phone, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.Phone, new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.Phone, "", new { @class = "text-danger" }) 
      </div> 
     </div> 


     <div class="form-group"> 
      @Html.LabelFor(model => model.Email, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
      @if (ViewContext.HttpContext.User.IsInRole("Stores Manager")) 
      { 
       @Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.Email, "", new { @class = "text-danger" }) 
      } 
      </div> 
     </div> 
     <div class="form-group"> 
      <div class="col-md-offset-2 col-md-10"> 
       <input type="submit" value="Save" /> 
      </div> 
     </div> 
    </div> 
} 
<div> 
    @Html.ActionLink("Back to List", "Index") 
</div> 
@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
} 

を注文状況変数に注意してください私はこれをやりたいと思っていますが、他の変数を使って私にそれを行う方法を私に示してもらえれば、私は素晴らしいことになるでしょう。

+0

あなたは「変数」と言うとき、あなたは「意味を動作するようですあなたのモデルの「特性」ですか? – Balde

+0

はい私はBaldeをします。 –

答えて

0

こんにちはみんなは、それがこれを行うことによって動作するように広範囲にそう教えて気軽に発生する可能性があるすべての問題を、それをテストしていないてしまったが、これは

<div class="form-group"> 
      @Html.LabelFor(model => model.Email, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
      @if (User.IsInRole("Stores Manager")) 
      { 
       @Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.Email, "", new { @class = "text-danger" }) 
      } 
      else 
      { 
       @Html.HiddenFor(model => model.Email) 
      } 
      </div> 
0

Viewsはですプロパティは、Userと呼ばれる:

@if (User.IsInRole("Stores Manager")) 
{ 
    @Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "form-control" } }) 
    @Html.ValidationMessageFor(model => model.Email, "", new { @class = "text-danger" }) 
} 

ユーザーが店長の役割ではない場合、その後、これらのプロパティは、あなたのモデルでは必要ありませんする必要がフォームを送信します。

+0

ユーザーが注文を編集したときにこれを実行します。メールは以前と同じようになります –

+0

少し文脈を教えてください。私は実際に私が追加していないOrderStatusでそれをやりたいプロパティを電子メールでやりたいのですが、チェックアウト時に値1が与えられ、OrderStatusに対応する1が "Ordered"です。スタッフがそれを編集# –

+0

あなたのモデルを保存する方法によって異なります。 NOT "Store Manager"ユーザーがフォームを送信すると、コントローラーのアクションでモデルを保持するパラメーターに 'Email'がヌルになります。次に、パラメータにある 'CustomerOrder'エンティティを直接保存すると' Email'がnullに更新されます。これは 'OrderStatus'にも当てはまります。 – Balde

関連する問題