[英]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.