如何在asp.net mvc 5中批准或拒绝管理员批准的用户端记录

Posted

技术标签:

【中文标题】如何在asp.net mvc 5中批准或拒绝管理员批准的用户端记录【英文标题】:how to approve or reject record on user side on admin's approval in asp.net mvc 5 【发布时间】:2019-03-31 21:28:39 【问题描述】:

我是 asp.net 和 MVC 的初学者。我想从管理员那里批准或拒绝记录,如果单击批准按钮 从管理员端,只有该记录将显示在用户端,否则不会。我已将 IsShow db 列作为数据库中的 bit 数据类型,并基于此我想要批准或拒绝记录。任何人都可以帮我解决这个问题,我尝试了以下事情,如果我用 Jquery 或纯 c# 代码来做这件事。我搜索了这个,但没有得到满意的答案

 My Model

 public partial class UserComments

    public int Id  get; set; 
    public string Name  get; set; 
    public string PhoneNumber  get; set; 
    public string Email  get; set; 
    public string Comment  get; set; 
    public string Path  get; set; 
    public Nullable<bool> IsShow  get; set; 

我在管理端的控制器方法,用于批准和拒绝的管理视图完成

    public ActionResult Index()
    
        return View(db.UserComments.ToList().OrderByDescending(c => c.Id));
    

从用户端显示用户视图的我的控制器方法

    public ActionResult Gandhiji(int? id)
    

        ViewBag.user = db.UserComments.Where(c => c.Id == 1).OrderBy(c => c.Id).ToList();

        return View("Gandhiji");
    

我要显示已批准记录的用户侧视图

        @
            var Users = (IEnumerable<UserComments>)ViewBag.user;
        

        @foreach (var item in Users)
        
            <div class="col-sm-6 col-xs-12">
                <div class="panel panel-default text-center">

                    @*<div class="panel-body EApic" style="background: url(/Pictures/@p.ImagPath) no-repeat; background-size:cover;">*@
                    <div class="panel-body EApic" id="imagediv" style="background: url(/Pictures/@item.Path) no-repeat; background-size:cover;">
                        <div class="EAtext">
                                @html.Raw(item.Name)
                                <br />
                                @Html.Raw(item.Comment)
                        </div>
                    </div>


                    @*closing divs of row*@
                </div>

            </div>
        
    </div>

管理侧视图

    @foreach (var item in Model)
    
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.Name)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.PhoneNumber)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Email)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Comment)
            </td>
            <td>
                <img src="@item.Path" />
            </td>
            <td>
                <a href="#" id="show" data-id="@item.Id" class="btn btn-info">Show</a> |
                <a href="#" id="hide" data-id="@item.Id" class="btn btn-primary">Hide</a>
            </td>
        </tr>
    

</table>

<script>
    $(function () 
        ("#show").click(function () 
            $('#imagediv').html("");
            $('#imagediv').load('@Url.Action("Gandhiji", "Home")');
        
    );
</script>

【问题讨论】:

【参考方案1】:

批准记录是指任何列,例如 isApproved 值,将其从 false 变为 true。您需要根据该记录的 id 更新表。

有几种方法可以解决此问题。您可以在附加新实例之前分离旧对象

public ActionResult Edit(User user)
 
        if (ModelState.IsValid)
        
            var OldInsObj = db.Users.Find(user.UserId);
            DateTime UsersDateCreated = OldInsObj.UsersDateCreated;

            user.UsersDateCreated = UsersDateCreated;
            user.UsersDateModified = DateTime.Now;

            db.Entry(OldInsObj).State = EntityState.Detached;

            db.Entry(user).State = EntityState.Modified;

            db.SaveChanges();
            return RedirectToAction("Index");
        
 

您可以更新从数据库中检索到的实体实例。

public ActionResult Edit(int userId)
 
        var user = db.Users.Find(userId);

        if (TryUpdateModel(user))
                        
            user.UsersDateCreated = UsersDateCreated;

            user.UsersDateModified = DateTime.Now;

            db.SaveChanges();
            return RedirectToAction("Index");
        
 

或者您可以使用 Automapper 将用户实例的值复制到 OldInsObj 实例。

public ActionResult Edit(User user)
 
        if (ModelState.IsValid)
        
            var OldInsObj = db.Users.Find(user.UserId);
            DateTime UsersDateCreated = OldInsObj.UsersDateCreated;

            OldInsObj = Mapper.Map(user);

            OldInsObj.UsersDateCreated = UsersDateCreated;
            OldInsObj.UsersDateModified = DateTime.Now;

            db.SaveChanges();
            return RedirectToAction("Index");
        
 

如果您在批准记录的同一视图中,并且批准后您希望在同一页面上显示消息,您也可以返回 json。

【讨论】:

以上是关于如何在asp.net mvc 5中批准或拒绝管理员批准的用户端记录的主要内容,如果未能解决你的问题,请参考以下文章

403 - 禁止:访问被拒绝。 ASP.Net MVC [重复]

如何在 ASP.NET Core 5 MVC (.NET 5) 中获取记录的用户数据?

IIS Express 在调试 ASP.NET MVC 时出现拒绝访问错误

csharp ASP.NET MVC ActionFilter允许或拒绝具有可选子网掩码的IPv4地址。用于AppHarbor或任何其他服务器解决方案

用户 'root'@'localhost' 的 ASP.NET MVC MySQL 访问被拒绝(使用密码:否)

如何在 ASP.NET MVC 中手动设置用户角色?