asp.net MVC 如何记住回发时的错误值?

2023-11-22

这是可行的,但是如何???

我有一个帖子的控制器操作:

[AcceptVerbs(HttpVerbs.Post )]
public ActionResult Edit(Person person)
{
   bool isvalid = ModelState.IsValid;
   etc.

Person 对象有一个属性 BirthDate,类型为 DateTime。 当我在表单中输入一些无效数据时,比如“blabla”,这显然不是有效的日期时间,它会用正确的数据填充所有(其他)Person 属性,并用新的空白 DateTime 填充 BirthDate 属性。 bool isvalid 的值为“false”。 到目前为止,一切都很好。

然后我这样做:

return View(p);

我认为:

<%= Html.TextBox("BirthDate", String.Format("{0:g}", Model.BirthDate)) %>
<%= Html.ValidationMessage("BirthDate", "*") %>

蚂蚁来了:我希望模型包含新的空白日期时间,因为我没有放入任何新数据。其次,当视图显示某些内容时,它必须是日期时间,因为Model.BirthDate除了 DateTime 之外不能容纳任何东西。 但令我惊讶的是,它显示了一个带有“blabla”值的文本框! (以及后面的红色*)

这当然很好,因为用户可以看到他输入的错误内容,但是如何将该(blabla)字符串传输到日期时间字段中的视图?

编辑: ModelState 信息在这里帮了我很多。 我还注意到,在 MVC 2 中,当您创建自己的模板时 Html.EditorFor() 你必须自己实现这个行为。 我创建了一个

DateTime.ascx 

在 /views/shared/EditorTemplates 文件夹中,我必须检查此属性值是否存在模型状态错误,如果是,则显示无效数据而不是模型数据。

所以在视图中我使用这个:

 <%= Html.LabelFor(model => model.DateOfBirth) %>

在 DateTime.ascx 中我使用这个:

<%
bool invalidData = false;
string propertyName = ViewData.ModelMetadata.PropertyName;

ModelState ms = ViewData.ModelState[propertyName];
if (ms != null)
{
   invalidData = ms.Errors.Count > 0;
}
string valueToshow = invalidData ? ViewData.ModelState[propertyName].Value.AttemptedValue : String.Format("{0:g}", Model);
%>
<input class="text-box single-line" id="<%= propertyName %>" name="<%= propertyName %>" type="text" value="<%= valueToshow %>" />

ModelState 为每个表单元素保存 KeyValuePairs,其中键是字段名称,值是您在字段中输入的内容。然后,Html Helpers 查看 ModelState,如果您没有显式指定值,它们将从 ModelState 中提取该值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

asp.net MVC 如何记住回发时的错误值? 的相关文章

随机推荐

  • Play 框架 CORS 标头

    我正在尝试为我的 Play 框架应用程序设置 CORS 标头 具体来说我收到这个错误 cannot load http 127 0 0 1 9000 No Access Control Allow Origin header is pres
  • ActiveRecord::StatementInvalid: PG::Error: 错误: 列“id”中的空值违反了非空约束

    我在我的应用程序中经常收到以下错误 如果我重新启动 Rails 应用程序 此错误将在一段时间内不会出现 导轨 3 1 3 红宝石 1 9 3 ActiveRecord StatementInvalid PG Error 错误 空值 列 id
  • Objective C 中的动态特性

    我发现 Objective C 对象属性可以标记为 dynamic让编译器知道实现将在运行时可用 我想知道是否有一种方法可以告诉编译器对象上的所有属性都是动态的 而无需逐一显式指定它们 我没有预先提供属性列表 我知道如果我只使用这不会成为问
  • Spring 的 @Autowired 是一个巨大的性能问题吗?

    我有一个项目 我不知道 200 300 daos 服务 控制器 我使用 Autowired将所有内容连接在一起 而不是指定中的所有内容applicationContext xml 我的问题是 这对我的启动时间有多大的性能影响 删除所有的是否
  • MERGE 表,匹配时不执行任何操作

    我有一张桌子DOMAINS在 2 个不同的列模式中ID NAME CODE DESCRIPTION For any NAME存在于新模式中 它应该使用现有的ID没有任何合并 对于那些新的NAME记录 它应该插入ID来自旧模式 MERGE I
  • 在 PHP 中跨服务器传输会话

    我需要跨服务器传输用户会话 IE 如果用户登录 server1 并且该用户存在于 server2 中 那么我必须将用户会话详细信息传输到 server2 为此 我使用了以下技术 从 server1 将用户重定向到http server2 a
  • 如何回收我的 SqliteCommand 以加速此 Sqlite 批量插入 (iOS)?

    我使用下面的代码批量插入 30000 行 一次 1000 行 但它仍然没有达到应有的速度 在这个例子中提高 SQLite 的每秒插入性能 我可以看到他们正在创建SqliteCommand仅一次 然后通过重置并清除绑定来回收它 但是 我在 i
  • FacesContext 的生命周期?

    在经历javadoc 的FacesContext 我看到这句话 该实例保持活动状态 直到调用其release 方法为止 之后不允许进一步引用该实例 当 FacesContext 实例处于活动状态时 除了执行此 Web 应用程序的 Servl
  • 在 URL 中传递用户名和密码以进行 HTTP 基本身份验证

    当传递 URL 中编码的用户名和密码时 例如 https 阿拉丁 电子邮件受保护 index html 客户端实际上是否在授权标头中发送了此信息 对于这种URL编码 服务器端需要进行怎样的处理呢 客户端实际上是否在授权标头中发送了此信息 这
  • RxJ 中“new Observable()”和“of()”有什么区别

    有什么区别new Observable and of in RxJs 在我的测试用例中 当我尝试返回时new Observable 它给了我一个有线错误 如果我将其替换为of 来自 Rxjs 它工作正常 我的印象是Observable cr
  • 跨项目的部分类

    是否可以跨项目进行部分类 例如项目 1 有一个客户类别 Project2 是一个可选模块 通过附加订单类并利用原始客户类来添加到客户类中 您不能使用partial关键字在项目之间拆分类的代码 这partial关键字是编译器技巧 编译器将从它
  • 在 VB.NET 的 List(Of String) 中查找重复项

    我有一个customers我试图在其中查找重复客户的列表 字符串 If Not customers Count customers Distinct ToList Count Then customers customers Except
  • 使用 JPA 标准通过标准构建器为 postgres jsonb 列构建谓词

    我需要将谓词添加到 JSONB 列的现有谓词列表中 Entity Entity Table name a TypeDefs TypeDef name jsonb typeClass JsonBinaryType class public c
  • NSData writeToFile:atomically: 不会立即保存文件

    我正在从网络下载 SQLite 数据库到我的 iPad 应用程序中 如果我将其写入磁盘设置atomically YES我无法立即使用它 因为即使文件在那里 sqlite 也会抱怨表不在那里 如果我使用atomically NO或者我延迟打开
  • 为仅可用作键盘快捷键的命令添加 Visual Studio 工具栏按钮

    这个问题与此相关ReSharper YouTrack 问题 在安装了 ReSharper 7 1 1 的 Visual Studio 2010 中 如果我转到 工具 gt 选项 gt 环境 gt 键盘 则会出现一个名为 ReSharper
  • Hive JDBC getConnection 不返回

    我正在关注 hive JDBC 教程 我无法让它工作 当它尝试获取连接时 它就会挂起 它也不报告任何错误 我确定 Hive 服务器正在运行 有什么帮助吗 public class HiveJdbcClient private static
  • 团队构建错误:路径...已映射到工作区

    在 Team Foundation Server 中创建新版本时 尝试运行新版本时出现以下错误 路径 C Build ProductReleases FullBuildv5 4 2x Sources 已经映射到工作区 构建服务器 23 我无
  • this.$emit 与 this.$root.$emit,vuejs 中的最佳实践

    我有 vue2 组件 可以使用以下命令添加和删除v if 在某些情况下 我在他们之间进行交流 emit来自发件人 以及 on在接收器中 我一直在使用this root emit广播自定义事件和this root on来处理事件 我发现使用t
  • 如何在JavaFX中为组布局添加背景颜色?

    我需要向 JavaFX 中的组添加背景颜色 我尝试用 CSS 添加它 但由于某种原因它不起作用 CSS 适用于所有其他布局管理器 但不适用于 Group 我该怎么办 Solution 替换您的使用Group with a Pane一切都会表
  • asp.net MVC 如何记住回发时的错误值?

    这是可行的 但是如何 我有一个帖子的控制器操作 AcceptVerbs HttpVerbs Post public ActionResult Edit Person person bool isvalid ModelState IsVali