如何通过单击按钮更改表中的数据

时间:2018-03-13 18:34:55

标签: c# asp.net-mvc

我想要一个按钮,点击它会将字符串值从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")
    }
}

在方法中我应该放什么才能让变化发生?如果有人可以提供帮助,我将非常感激。

2 个答案:

答案 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")
}