MVC5文本框显示不正确的数据

时间:2016-11-16 09:00:49

标签: c# asp.net-mvc

在我的MVC5网站的管理部分,我有一个页面,其中列出了表格中的所有用户,如下所示:

Users table

点击change username会显示一个简单的页面来更改用户名,如下所示:

Change username page

更改用户名(并点击更改用户名)后,会显示列出所有用户的页面。

  

如果我现在尝试更改其他用户的用户名,则change username页面会显示上一个用户的用户名(即用户名) 。如果我刷新页面,则显示正确的用户名

例如:

如果我将用户kevin更改为dave,然后点击change username rikesh更改用户名页面信息dave而不是rikesh

  

如果我现在刷新页面rikesh,则会显示

代码:

    public ActionResult ChangeUsername(int userId)
    {
        // get the current username

        var viewModel = new ChangeUserNameViewModel
        {
            UserId = userId,
            UserName = username
        };

        return View(viewModel);
    }


@using (Html.BeginForm("ChangeUserName", "Account", FormMethod.Post, new { id="ChangeUserNameForm" }))
{
    <div class="editor-label">
        @Html.LabelFor(m => m.UserName)
    </div>
    <div class="editor-field">
        @Html.TextBoxFor(m => m.UserName, new { style = "width: 300px" })
        @Html.HiddenFor(m => m.UserId)
    </div>
    <button type="submit" value="ChangeUserName" name="action:ChangeUserName" id="ChangeUserNameButton" onclick="checkUserNameDifferent()" style="margin-top: 25px; background-color: red">Change Username</button>
    <button type="submit" value="Cancel" name="action:Cancel" style="margin-top: 25px; margin-left: 15px; width: 100px">Cancel</button>
}

我认为这可能是一个缓存问题,但如果我在Chrome Incognito模式下尝试此操作并尝试通过使用以下方式对其进行注释来停止对控制器操作的缓存,则会遇到同样的问题:

[OutputCache(VaryByParam = "*", Duration = 0, NoStore = true)]

2 个答案:

答案 0 :(得分:1)

如果您使用@Html.TextboxFor,可能会发生这种情况。尝试将ModelState.Clear()添加到控制器中的操作。

public ActionResult ChangeUsername(int userId)
{
    // Clear any old model state info
    ModelState.Clear();

    // get the current username
    var viewModel = new ChangeUserNameViewModel
    {
        UserId = userId,
        UserName = username
    };

    return View(viewModel);
}

答案 1 :(得分:0)

试试这个: -

public ActionResult ChangeUsername(int userId)
{
    // get the current username

    var viewModel = new ChangeUserNameViewModel
    {
        UserId = userId,
        UserName = username
    };
    ModelState.Clear();
    return View(viewModel);
}