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

标签 asp.net-mvc asp.net-mvc-2

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

我有一个帖子的 Controller 操作:

[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);

在 View 中我有这个:

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

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

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

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

DateTime.ascx 

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

所以在 View 中我使用这个:

 <%= 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 中提取该值。

关于asp.net-mvc - asp.net MVC 如何记住回发时的错误值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2581042/

相关文章:

c# - 从 _layout.cshtml 中的数据库加载数据

asp.net-mvc - HttpResponseMessage 内容不会显示 PDF

c# - ASP.NET MVC : How to redirect a non www to www and vice versa

c# - 扩展 ASP.NET MVC 2 模型绑定(bind)器以适用于 0、1 bool 值

c# - ASP.NET MVC - 请求周期中最早可以检测到静态资源请求的点是什么?

asp.net-mvc - 使用 Azure AD 对内部和外部用户进行身份验证

asp.net-mvc - 在运行时使用 Unity 属性注入(inject)注入(inject) IPrincipal

asp.net-mvc - 即使禁用验证,ASP.NET 请求验证也会出现异常

asp.net-mvc-2 - MVC 的 DataAnnotationsModelMetadataProvider 中的 "Func<object> modelAccessor"参数是什么?

c# - 如何强制用户不通过 asp.net mvc 2 应用程序中的 url 输入跳过页面?