在我的MVC5网站的管理部分,我有一个页面,其中列出了表格中的所有用户,如下所示:
点击change username
会显示一个简单的页面来更改用户名,如下所示:
更改用户名(并点击更改用户名)后,会显示列出所有用户的页面。
如果我现在尝试更改其他用户的用户名,则
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)]
答案 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);
}