2013-07-25 61 views
2

我目前正在編寫一個小的內部網頁面。它使用實體框架將員工及其基本信息顯示在列表中,以便與我的數據庫進行交互並創建一個「員工」類。我正在添加邏輯以允許用戶編輯他們的配置文件。我當前的問題:添加一個控制器來編輯配置文件

  • 這些表格只有在從本地主機導航時纔有效;使用 PC-NAME/WebAddress導致404錯誤。什麼可能導致這種情況?我怎樣才能解決這個問題 ?
  • 表格爲空;我想編輯一個用戶名爲 的配置文件id = 1的例子,所有輸入框都會顯示出來,但它們都是空的 因此您需要再次鍵入所有信息。我能做些什麼來添加此功能?
  • 訪問不限於管理員和配置文件的所有者(其中您的
    當前域名登錄==我的用戶數據庫中的「domainAC」列 應允許編輯該帳戶,否則)。這裏最好的解決方案是什麼?

任何幫助解決任何這些問題將不勝感激。

這裏是信息我的當前設置/流:使用HTML /剃刀

顯示用戶:(index.cshtml)

<table id="employeeTable"> 
     <thead> 
      <tr> 
       <th>Name</th> 
       <th>Branch</th> 
       <th>Phone No.</th> 
       <th>Extension</th> 
       <th>Email</th> 
      </tr> 
     </thead> 
     <tbody> 
      @foreach (var prod in Model) 
      { 
       <tr> 
        <td>@prod.FullName</td> 
        <td>@prod.Branch</td> 
        <td class="js-phoneNumbers">@prod.PhoneNo</td> 
        <td>@prod.Extension</td> 
        <td>@prod.Email</td> 
        @if (User.IsInRole(@"Admins") || User.Identity.Name == prod.DomainAC) 
        { 
         <td><a href="/home/edit/@prod.Id" style="color: blue;">edit</a></td> 
        } 
        else 
        { 
         <td>User => @User.ToString()</td> 
        } 
        <td> 
         <input type="checkbox" name="message" value="@prod.PhoneNo">Message<br> 
        </td> 
       </tr> 
      } 
     </tbody> 
    </table> 

HomeController.cs:

namespace App1.Controllers 
{ 
public class HomeController : Controller 
    { 

     protected edmxDatabase entities = new edmxDatabase(); 

     protected override void Dispose(bool disposing) 
     { 
      entities.Dispose(); //what does this do? It was made by default 
      base.Dispose(disposing); 
     } 

     public ActionResult Index() 
     { 
      var products = 
       from p in entities.Employees 
       orderby p.Branch descending 
       select p; 

      return View(products); 
     } 
     [HttpGet] 
     public ActionResult Edit(int id = -1) 
     { 
      var employee= new Employee(); 

      if (employee == null) 
      { 
       return HttpNotFound(); 
      } 

      return View(employee); 
     } 
    } 
} 

編輯。 cshtml:

@model App1.Models.Employee 

@{ 
    ViewBag.Title = "Edit"; 
} 
@using (Html.BeginForm()) 
{ 
     <fieldset> 
     <legend>Employee</legend> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.FullName) 
     </div> 
     <div class="editor-field"> 
      @Html.TextBoxFor(model => model.FullName) 
     </div> 
     <br/> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.Branch) 
     </div> 
     <div class="editor-field"> 
      @Html.TextBoxFor(model => model.Branch) 
     </div> 
     <br/> 

     <div class="editor-label"> 
      <div style="float: left;"> 
       @Html.LabelFor(model => model.DomainAC) 
      </div> 
      @Html.TextBoxFor(model => model.DomainAC) 
     </div> 
     <br/> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.PhoneNo) 
     </div> 
     <div class="editor-field"> 
      @Html.TextBoxFor(model => model.PhoneNo) 
     </div> 
     <br/> 

     <input type="submit" value="Edit Employee details" /> 

    </fieldset> 
} 
+1

'當從本地主機導航到形式才起作用;'使用網址幫手index.chtml:'HREF =」 @ Url.Action(「Edit」,「Home」,new {id = prod.Id})「' – YD1m

+0

@ YD1m這是一個!非常感謝你!:) –

回答

0

這些表格僅在從本地主機導航時纔有效;

使用網址幫手index.chtml:

href="@Url.Action("Edit", "Home", new { id = prod.Id })" 

形式是空的;

你應該能夠讓你在控制器型號:

 [HttpGet] 
     public ActionResult Edit(int id = -1) 
     { 
      var employee = new Employee(); // here you should to get user data for editing instead of creating empty model 

      if (employee == null) 
      { 
       return HttpNotFound(); 
      } 

      return View(employee); 
     } 

訪問並不限於管理員和個人資料的所有者

這種情況下,最好的解決辦法是爲CRUD操作實現自定義自動化屬性。閱讀更多herehere之後。

+0

2問題了!再次感謝您:) –

+1

檢查更新的答案;) – YD1m

0

對於第二個問題,表單爲空的原因是因爲您傳遞的是沒有數據顯示的員工的新實例,請嘗試此操作以進行測試。

var employee= new Employee { PhoneNo = "12345"}; 

您可以通過對類或方法使用Authorize屬性來限制角色的訪問。

[Authorize(Roles = "Admin")] 
public ActionResult Edit(int id = -1) 
+0

我怎麼才能授權是用戶是管理員或他們當前的域名登錄等於數據庫中的DomainAC值他們正試圖編輯的ID? –

0

您的網址

@Html.ActionLink("Edit", "Home", new { RID = m.RID }) 
      OR 
<a href='Edit/@m.RID ' >m.REName</a> 

控制器

public ActionResult Edit(string RID) 
     { 
      int _RID = 0; 
      int.TryParse(RID, out _RID); 
      RegisterModel model = new RegisterModel(); 
      if (_RID > 0) 
      { 
       var re = (from r in _context.Registrations where r.RID == _RID select r).First(); 
       model.RID = _RID; 
       model.REName = re.REName; 
       model.REAddress = re.REAddress; 
       model.REPhoneNo = re.REPhoneNo; 
       return View(model); 
      } 
      else 
      { 
      return View(); 
      } 
     } 
相關問題