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

标签 javascript c# html asp.net-mvc razor

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

enter image description here

这样做的目的是让用户单击下拉列表中的某个项目,然后将数据库中的用户名替换为自己的用户名,但仅限于该行。

我觉得代码是正确的,但是当我点击用户名时没有任何反应,所以肯定有什么问题或丢失。

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

尝试1:

View 中的代码:

        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>
     }

Controller 代码:

   [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>

Controller 代码:

        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>
}

关于javascript - 使用隐藏输入字段替换数据库中的条目 - Entity Framework ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31323989/

相关文章:

html - CSS 类不起作用 - 不同的类,相同的功能

html - 我如何摆脱我的 HTML/CSS 页面上的这个小绿框

javascript - 在 useEffect 第二个参数中使用对象,而不必将其字符串化为 JSON

javascript - 单击时以编程方式关闭 Google map POI

javascript - 用 Javascript 计算美国各州的销售税

c# - IFormFile 的数据注释,因此它只允许扩展名为 .png、.jpg 或 .jpeg 的文件

c# - 在unity3d中隐藏按钮

javascript - MongoDB- Mongoose : document structure/architecture

javascript - 如何将 string.replace 与正则表达式一起使用

c# - Gmail 的最后事件