繁体   English   中英

使用隐藏的输入字段替换数据库中的条目-Entity Framework

[英]Replace entry from database using hidden input fields - Entity Framework

我有一个按钮下拉列表,每行显示一个人的姓名和他们的城市,这是从数据库中读取的。

在此处输入图片说明

这样做的目的是让用户单击下拉列表中的一项,并用其自己的名称(但仅针对该行)替换数据库中的用户名。

我觉得代码是正确的,但是当我单击用户名时没有任何反应,因此肯定有错误或遗漏。

现在,我已经尝试了两种方法(因为我不确定这种情况下正确的方法),但是它们都失败了。

尝试1:

查看代码:

        using (Html.BeginForm("OverrideLock", "Branch", FormMethod.Post))
     {
         <div class="btn-group">
             <button type="button" id="overrideLock" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                 Override <span class="caret"></span>
             </button>
             <ul class="dropdown-menu">
                 @foreach (var person in Model.Where(person => person.userName != null))
                 {
                     <li class="overrideListItem">
                         <input type="hidden" name="personUsername" value="@person.userName"/>
                         <input type="hidden" name="personCity" value="@person.city"/>
                         <a>@person.city <span class="personToOverride"><b>@person.userName</b></span></a>
                     </li>
                 }
             </ul>
         </div>
     }

控制器代码:

   [HttpPost]
    public ActionResult OverrideLock(string personUsername, string personCity)
    {
        var context = new PortalEntities();
        var personToRemove = context.LockBranches.Where(p => p.userName == personUsername && personCity == p.Branch.city);
        var currentUser = HttpContext.User.Identity.Name;
        foreach (var person in personToRemove)
        {
            context.Entry(person).CurrentValues.SetValues(currentUser);
        }

        //context.LockBranches.Remove(personToRemove.FirstOrDefault());
        context.SaveChanges();
        return RedirectToAction("Index");
    }

尝试2:

查看代码:

        <div class="btn-group">
        <button type="button" id="overrideLock" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
            Override <span class="caret"></span>
        </button>
        <ul class="dropdown-menu">
            @foreach (var person in Model.Where(person => person.userName != null))
            {
                <li class="overrideListItem">
                    <input type="hidden" name="personUsername" value="@person.userName"/>
                    <input type="hidden" name="personCity" value="@person.city"/>
                    <a>@person.city <span class="personToOverride"><b>@person.userName</b></span></a>
                </li>
            }
        </ul>
    </div>

控制器代码:

        public void OverrideLock(string personUsername, string personCity)
    {
        var context = new PortalEntities();
        var personToRemove = context.LockBranches.Where(p => p.userName == personUsername && personCity == p.Branch.city);
        var currentUser = HttpContext.User.Identity.Name;
        foreach (var person in personToRemove)
        {
            context.Entry(person).CurrentValues.SetValues(currentUser);
        }

        //context.LockBranches.Remove(personToRemove.FirstOrDefault());
        context.SaveChanges();
    }

不管哪种方式,什么都没有发生。

谢谢你的帮助! 让我知道我是否可以添加其他信息。

忘了我最后的答案。 你可以使用jQuery吗?

试试这个(用jQuery):

@using (Html.BeginForm("OverrideLock", "Branch", FormMethod.Post, new { id = "override-form" }))
{
    <div class="btn-group">
        <button type="button" id="overrideLock" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
            Override <span class="caret"></span>
        </button>
        <ul class="dropdown-menu">
            @foreach (var person in Model.Where(person => person.userName != null))
            {
                <li class="overrideListItem" data-username="@person.userName" data-city="@person.city">
                    <a>@person.city <span class="personToOverride"><b>@person.userName</b></span></a>
                </li>
            }
        </ul>

        <input type="hidden" name="personUsername" value="" />
        <input type="hidden" name="personCity" value="" />

        <script>
            $(function () {

                $(".overrideListItem").click(function () {

                    var userName = $(this).attr("data-username");
                    var city = $(this).attr("data-city");

                    $("input[name='personUsername']").val(userName);
                    $("input[name='personCity']").val(city);
                    $("#override-form").submit();

                });
            });
        </script>
    </div>
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM