我想要一个按钮,点击它会将字符串值从null更改为任何其他文本(例如' yes')。我在视图中有一个按钮,它在控制器中调用了一个更新方法,但我不知道该更新方法的内容。
在视图中,这是按钮(' item'指模型,'已激活'指的是该模型中的字符串列,其默认值为null)
@model IEnumerable<ProjectMVC2.Models.ApplicationUser>
@foreach (var item in Model)
{
@if (item.Activated == null)
{
using (Html.BeginForm("Update", "User", new { id = item.Id })){
@Html.AntiForgeryToken()
<td class="button btn-default" align="center">
<input type="submit" value="Activate" class="btn btn-default" />
</td>
}
}
else if (item.Activated == "Yes")
{
<td class="c" align="center">
Activated already
</td>
}
我的控制器中有方法
public class UserController : BaseController
{
ApplicationDbContext context;
public UserController()
{
context = new ApplicationDbContext();
}
// GET: User
public ActionResult Index()
{
var User = context.Users.ToList();
return View(User);
}
public ActionResult Update()
{
return RedirectToAction("Index")
}
}
在方法中我应该放什么才能让变化发生?如果有人可以提供帮助,我将非常感激。
答案 0 :(得分:0)
您必须自己更新模型:
public ActionResult Update()
{
var users = context.Users.ToList();
foreach(var user in users)
{
user.Activated = "Yes";
}
context.SaveChanges();
return RedirectToAction("Index")
}
但是,此更改会保留,因此如果您再次返回该页面,您仍会看到user.Activated = "Yes"
。如果您需要临时的东西,我建议使用以下代码。
public ActionResult Update()
{
var users = context.Users.ToList();
foreach(var user in users)
{
user.Activated = "Yes";
}
return View("Index", users);
}
答案 1 :(得分:0)
使用for
循环来利用模型绑定到集合。
这是通过使用索引表达式来完成的,例如Model[i]
。
添加HiddenFor
告诉控制器需要激活哪些用户。
@for (var i = 0; i < Model.Length; i++)
{
var item = Model[i];
@if (item.Activated == null)
{
using (Html.BeginForm("Update", "User", new { id = item.Id }))
{
@Html.AntiForgeryToken()
@Html.HiddenFor(_ => Model[i].Id)
<td class="button btn-default" align="center">
<input type="submit" value="Activate" class="btn btn-default" />
</td>
}
}
else if (item.Activated == "Yes")
{
<td class="c" align="center">
Activated already
</td>
}
更新方法现在接受要激活的用户集合。
public ActionResult Update(IEnumerable<ApplicationUser> usersToActivate)
{
// Are there any user to active?
if (usersToActivate == null)
{
return View();
}
var userIds = usersToActivate.Select(u => u.Id).ToList();
var usersToUpdate = context.Users.Where(user => userIds.Contains(user.Id));
foreach (var userToUpdate in usersToUpdate)
{
userToUpdate.activated = "Yes";
}
context.SaveChanges();
return RedirectToAction("Index")
}