MVC5 Razor 在Controller中修改Model的值为什么在View没有变化?

zl_c 2015-06-11 01:22:00
2个同名的Action, 一个是GET,另一个POST方式。模型实例提交到POST的Action中处理,将模型一些值修改,但在View中看不到变化,仍然是原来的值。

上代码,
Model
    public class TestModel
{
[Display(Name = "用户名")]
[Required(ErrorMessage = "必填")]
public string Name { get; set; }

[Display(Name = "密码")]
[Required(ErrorMessage = "必填")]
public string Password { get; set; }
}

Controller
        public ActionResult Test()
{
TestModel testModel = new TestModel()
{
Name = "用户1",
Password = "password1"
};
return View(testModel);
}

[HttpPost]
public ActionResult Test(TestModel testModel)
{
bool isOk = true;//这里假设密码是对
if (isOk)
{
testModel.Name = "用户2";//此行没起作用
testModel.Password = "password2";//此行没起作用
}
else
{
ModelState.AddModelError("","密码错误");
}
return View(testModel);
}

View
@{
Layout = null;
}
@model Web.Models.Member.TestModel
<!DOCTYPE html>

<html>
<head>
<meta name="viewport" content="width=device-width" />
<title></title>
</head>
<body>
<div>
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<div>
@Html.LabelFor(model => model.Name)
@Html.TextBoxFor(model => model.Name)
</div>
<div>
@Html.LabelFor(model => model.Password)
@Html.TextBoxFor(model => model.Password)
</div>
<div><input type="submit" value="提交" /></div>
}
</div>
</body>
</html>

按我的设想,提交后,在页面上文本框中应该自动显示"用户2",但仍然显示“用户1”
...全文
440 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
zl_c 2015-06-12
  • 打赏
  • 举报
回复
引用 2 楼 wg5945 的回复:
ModelState.Clear();
正解,试了有效果。 但不知道原因,希望能解释一下。
zl_c 2015-06-12
  • 打赏
  • 举报
回复
引用 3 楼 starfd 的回复:
TestModel testModel = new TestModel()
            {
                Name = "用户1",
                Password = "password1"
            };
幸亏看了下,这亮瞎眼啊,你这个都是每次Get访问实例化一个全新的TestModel ,然后赋值 "用户1"……
Get的Action只进一次的,第二次是POST的Action里了。
zl_c 2015-06-12
  • 打赏
  • 举报
回复
引用 1 楼 findcaiyzh 的回复:
@using (Html.BeginForm()) { @Html.ValidationSummary(true) <div> @Html.LabelFor(model => model.Name) @Html.TextBoxFor(model => model.Name, new {Value = Model.Name }) </div> <div> @Html.LabelFor(model => model.Password) @Html.TextBoxFor(model => model.Password, new { Value = Model.Password }) </div>
没效果
moonwrite 2015-06-12
  • 打赏
  • 举报
回复
1楼的方法不可以取 我也看不出什么问题来 但可以告诉你方法 断点 调试 走一下 你就会知道的
  • 打赏
  • 举报
回复
引用 3 楼 starfd 的回复:
TestModel testModel = new TestModel()
            {
                Name = "用户1",
                Password = "password1"
            };
幸亏看了下,这亮瞎眼啊,你这个都是每次Get访问实例化一个全新的TestModel ,然后赋值 "用户1"……
简而言之,你的两个TestModel根本没任何关系,只是一个同字符串名字的实体而已,如果你真要实现你的想法的话,应该修改成下面这种

static TestModel testModel =  new TestModel()//这里是关键
            {
                Name = "用户1",
                Password = "password1"
            };
public ActionResult Test()
        {
            return View(testModel);
        }
 
        [HttpPost]
        public ActionResult Test(TestModel postModel)
        {
            bool isOk = true;//这里假设密码是对
            if (isOk)
            {
               testModel.Name = "用户2";//此行没起作用
                testModel.Password = "password2";//此行没起作用
            }
            else
            {
                ModelState.AddModelError("","密码错误");
            }
            return View(testModel);
        }
  • 打赏
  • 举报
回复
TestModel testModel = new TestModel()
            {
                Name = "用户1",
                Password = "password1"
            };
幸亏看了下,这亮瞎眼啊,你这个都是每次Get访问实例化一个全新的TestModel ,然后赋值 "用户1"……
wg5945 2015-06-11
  • 打赏
  • 举报
回复
ModelState.Clear();
宝_爸 2015-06-11
  • 打赏
  • 举报
回复
@using (Html.BeginForm()) { @Html.ValidationSummary(true) <div> @Html.LabelFor(model => model.Name) @Html.TextBoxFor(model => model.Name, new {Value = Model.Name }) </div> <div> @Html.LabelFor(model => model.Password) @Html.TextBoxFor(model => model.Password, new { Value = Model.Password }) </div>

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧