当前位置:  开发笔记 > 后端 > 正文

ASP.NET MVC:在回发时更改模型的属性

如何解决《ASP.NETMVC:在回发时更改模型的属性》经验,为你挑选了2个好方法。

我一直在玩ASP.NET MVC并碰到了一些我无法弄清楚的东西.

假设我有一个这样的对象:

public class TestObject
{
    public string Name { get; set; }
    public int Age { get; set; }
}

和这样的视图页面(Create.aspx):

<%=Html.TextBox("Name") %>

<%=Html.TextBox("Age")%>

在我的控制器上我有这些动作:

[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Create()
{
    return View(new TestObject { Name = "DefaultName", Age = 10 } );
}

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(TestObject o)
{
    o.Name = "ChangedNameToSomethingElse";
    o.Age = 15;
    return View(o);
}

Html.TextBox()方法始终使用默认值生成文本框,即使在回发之后,对象也会在其值上传递回不同的属性.现在,被授予,我想不出一个真实世界的例子,为什么我想要做这样的事情,但我仍然不明白为什么我总是最终填充文本框填充了在Create操作上设置的模型的值与AcceptVerbs(HttpVerbs.Get)属性.

注意:我已经尝试Html.TextBox("Name", Model.Name)但结果仍然相同.我AcceptVerbs(HttpVerbs.Post)通过ViewData将值传递给View,验证了实际运行的Create操作.此外,当我输出值时,显示更新的值,<%=Model.Name %>但不是在文本框上.

是否有一些明显我缺失的东西,或者这种行为背后是否存在推理?



1> dpen2000..:

如果通过声明方法或通过UpdateModel或TryUpdateModel将post请求的结果绑定到TestObject等对象,则会使用这些值填充名为ModelState的属性.诸如Textbox之类的HTML帮助程序将始终通过显式传递的模型对象绑定到modelstate.


我刚刚检查过 您可以通过使用Post属性在Create操作中调用ModelState.Clear()来实现您想要的效果.

2> herostwist..:

我知道很久以前就已经回答了这个问题,但这是针对我的更有针对性的解决方案.

[HttpPost]
public ActionResult Create(TestObject o) { 
    ModelState.Remove("Name");    
    o.Name = "ChangedNameToSomethingElse";     
    ModelState.Remove("Age");    
    o.Age = 15;
    return View(o); 
}

希望这有助于那里的人.

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有