2

我目前正在编写一个小型的 Intranet 页面。它使用实体框架在列表中显示员工及其基本详细信息,以与我的数据库交互并创建一个“员工”类。我目前正在添加逻辑以允许用户编辑他们的个人资料。我目前的问题:

  • 这些表单仅在从 localhost 导航到时才有效;使用 PC-NAME/WebAddress 会导致 404。这可能是什么原因造成的?我怎样才能解决这个问题 ?
  • 表格是空的;例如,我想编辑配置文件 id=1 的用户,显示所有输入框,但它们都是空的,因此您需要再次输入他们的所有信息。我可以做些什么来添加这个功能?
  • 访问权限不仅限于管理员和配置文件的所有者(您
    当前的域登录 == 我的用户数据库中的“domainAC”列,您应该被允许编辑帐户,而不是其他)。这里最好的解决方案是什么?

任何解决这些问题的帮助将不胜感激。

这是我当前的设置/信息流:

使用 HTML/Razor 显示用户:(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>
}
4

3 回答 3

0

对于您的第二个问题,表单为空的原因是因为您正在传递一个没有数据要显示的 Employee 的新实例,请尝试使用此方法进行测试。

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

您可以通过对类或方法使用 Authorize 属性来限制角色的访问。

[Authorize(Roles = "Admin")]
public ActionResult Edit(int id = -1)
于 2013-07-25T11:05:24.373 回答
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();
            }
        }
于 2013-07-25T11:07:11.637 回答
0

这些表单仅在从 localhost 导航到时才有效;

在 index.chtml 中使用 url 助手:

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 操作实现自定义自动化属性。在此处和之后阅读更多信息

于 2013-07-25T10:59:07.710 回答