gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 12:36:02 25 4
gpt4 key购买 nike

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

我有一个帖子的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com