我有一个按钮下拉列表,每行显示一个人的姓名及其城市,这是从数据库中读取的。
这样做的目的是让用户单击下拉列表中的某个项目,然后将数据库中的用户名替换为自己的用户名,但仅限于该行。
我觉得代码是正确的,但是当我点击用户名时没有任何反应,所以肯定有什么问题或丢失。
现在,我已经尝试了两种方法(因为我不确定对于这种情况什么是正确的),但它们都失败了。
尝试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/