ChangingViewModelPropertiesinPOSTAction;}returnView("GetReport",newGetReportModel(){Identifier="test",Permission=true});当我发布表单时,执行此操作后,生成的视图没有任何变化。我的意思是,标识符的文本框没有我在操作中设置的“测试”字符串值。但是如果我清除ModelState,View将显示新值:[HttpPost]publicActionResultGetReport(GetReportModelmodel){if(!ModelState.IsValid){returnView();}ModelState.Remove("标识符");ModelState.Remove("权限");returnView("GetReport",newGetReportModel(){Identifier="test",Permission=true});我不明白为什么会这样?如果模型状态无效,为什么每个人都将模型返回给视图?例如,微软默认的项目模板有如下代码:}//他们为什么要将模型对象传递给视图//如果它仍然来自发布数据?返回视图(模型);首先回答你的第二个问题:如果不将模型对象传递给View(),它就不存在。视图的模型属性为空。在您看来,这意味着一些简单的事情:@Model.Identifier...将失败并出现NullReferenceException。这是我们将模型传回视图的原因之一。ModelState是否无效并不重要(即使您不传递模型,它也会被提供给视图)——实际上,我们想要这种无效状态,因为它允许我们向用户提供有用的错误消息。但是你的第一个问题实际上有一个好处,很少有MVC程序员似乎意识到,因为它在最常见的用例中是透明的:原因是HtmlHelper创建的输入字段和验证仍然可以在没有POST方法的情况下使用调用View()在模型的情况下:如果他们可以摆脱它,辅助方法根本不使用模型的属性。他们将尝试按以下顺序为eg找到值:首先是非空值。换句话说,如果ModelState["Identifier"]为null(或其Value为null),助手将只查看模型的Identifier属性。这也意味着像第一个示例中那样更改模型的属性不会更改呈现字段的内容。如果用户输入“不,不测试”,输入字段中的文本仍将是“不,不测试”,即使您发送带有“测试”的模型。所以是的,如果您需要为输入设置新值作为对POST的响应,您需要从ModelState中删除它们的状态。或者不要使用HTML帮助程序。以上就是C#学习教程:POST操作中修改ViewModel属性的全部内容分享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
