gpt4 book ai didi

asp.net - ASP.NET MVC 中的验证触发

转载 作者:行者123 更新时间:2023-12-04 06:56:05 27 4
gpt4 key购买 nike

我迷失在我正在从事的这个 MVC 项目中。我还阅读了布拉德威尔逊的文章。
http://bradwilson.typepad.com/blog/2010/01/input-validation-vs-model-validation-in-aspnet-mvc.html

我有这个:

public class Employee
{
[Required]
public int ID { get; set; }
[Required]
public string FirstName { get; set; }
[Required]
public string LastName { get; set; }
}

这些在 Controller 中:
public ActionResult Edit(int id)
{
var emp = GetEmployee();
return View(emp);
}

[HttpPost]
public ActionResult Edit(int id, Employee empBack)
{
var emp = GetEmployee();
if (TryUpdateModel(emp,new string[] { "LastName"})) {
Response.Write("success");
}
return View(emp);
}

public Employee GetEmployee()
{
return new Employee {
FirstName = "Tom",
LastName = "Jim",
ID = 3
};
}

我的观点如下:
<% using (Html.BeginForm()) {%>
<%= Html.ValidationSummary() %>

<fieldset>
<legend>Fields</legend>
<div class="editor-label">
<%= Html.LabelFor(model => model.FirstName) %>
</div>
<div class="editor-field">
<%= Html.DisplayFor(model => model.FirstName) %>
</div>

<div class="editor-label">
<%= Html.LabelFor(model => model.LastName) %>
</div>
<div class="editor-field">
<%= Html.TextBoxOrLabelFor(model => model.LastName, true)%>
<%= Html.ValidationMessageFor(model => model.LastName) %>
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>

<% } %>

请注意,唯一可编辑的字段是姓氏。当我回发时,我取回原来的员工并尝试仅使用 LastName 属性对其进行更新。但是我在页面上看到的是以下错误:

•FirstName 字段是必需的。

据我了解,这是因为 TryUpdateModel 失败了。但为什么?我告诉它只更新 LastName 属性。

我正在使用 MVC2 RTM

提前致谢。

最佳答案

问题是,当您的表单被发回时,FirstName字段为空。问题是,由于您将 Employee 作为参数传递给您的操作,因此在您有机会调用 GetEmployee() 之前进行验证。 .您可以做以下三件事之一:

1) 删除[Required]来自您的 FirstName 的属性 field 。

或者

2) 添加Html.HiddenFor()对于此字段,因此它将进行往返。像这样:

<%= Html.HiddenFor(model => model.FirstName) %>

或者

3) 将您的行动声明更改为:
public ActionResult Edit(int id, FormCollection form)

(3) 可能是您正在寻找的。

关于asp.net - ASP.NET MVC 中的验证触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2556813/

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