- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我一直在尝试遵循网络上的验证教程和示例,例如 David Hayden's Blog和官方ASP.Net MVC Tutorials ,但我无法获得以下代码来显示实际的验证错误。如果我有一个看起来像这样的 View :
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcApplication1.Models.Parent>" %>
<%-- ... content stuff ... --%>
<%= Html.ValidationSummary("Edit was unsuccessful. Correct errors and retry.") %>
<% using (Html.BeginForm()) {%>
<%-- ... "Parent" editor form stuff... --%>
<p>
<label for="Age">Age:</label>
<%= Html.TextBox("Age", Model.Age)%>
<%= Html.ValidationMessage("Age", "*")%>
</p>
<%-- etc... --%>
对于如下所示的模型类:
public class Parent
{
public String FirstName { get; set; }
public String LastName { get; set; }
public int Age { get; set; }
public int Id { get; set; }
}
每当我输入无效年龄(因为年龄被声明为整数),例如“xxx”(非整数), View 确实正确显示消息“编辑不成功。正确错误并重试”,并突出显示年龄文本框并在其旁边放置一个红色星号,以指示错误。但是,ValidationSummary 不会显示任何错误消息列表。当我自己进行验证时(例如:下面的 LastName),消息会正确显示,但 TryUpdateModel 的内置验证似乎不会在字段具有非法值时显示消息。
这是在我的 Controller 代码中调用的操作:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult EditParent(int id, FormCollection collection)
{
// Get an updated version of the Parent from the repository:
Parent currentParent = theParentService.Read(id);
// Exclude database "Id" from the update:
TryUpdateModel(currentParent, null, null, new string[]{"Id"});
if (String.IsNullOrEmpty(currentParent.LastName))
ModelState.AddModelError("LastName", "Last name can't be empty.");
if (!ModelState.IsValid)
return View(currentParent);
theParentService.Update(currentParent);
return View(currentParent);
}
我错过了什么?
最佳答案
我下载并查看了 ASP.NET MVC v1.0 source code来自 Microsoft,并发现,无论是意外还是设计,都没有办法做我想做的事,至少在默认情况下是这样。显然,在调用 UpdateModel 或 TryUpdateModel 期间,如果整数验证(例如)失败,则不会在与错误值的 ModelState 关联的 ModelError 中显式设置 ErrorMessage,而是设置 Exception 属性。根据MVC ValidationExtensions中的代码,以下代码用于获取错误文本:
string errorText = GetUserErrorMessageOrDefault(htmlHelper.ViewContext.HttpContext, modelError, null /* modelState */);
注意传递了 modelState 的 null 参数。 GetUserErrorMEssageOrDefault 方法然后像这样开始:
private static string GetUserErrorMessageOrDefault(HttpContextBase httpContext, ModelError error, ModelState modelState) {
if (!String.IsNullOrEmpty(error.ErrorMessage)) {
return error.ErrorMessage;
}
if (modelState == null) {
return null;
}
// Remaining code to fetch displayed string value...
}
因此,如果 ModelError.ErrorMessage 属性为空(我在尝试将非整数值设置为声明的 int 时验证了它是空的),MVC 继续检查我们已经发现的 ModelState 为空,因此对于任何 Exception ModelError 都会返回 null。因此,在这一点上,我对这个问题的 2 个最佳解决方法是:
还有其他想法吗?
关于c# - ASP.NET MVC : Validation messages set in TryUpdateModel not showning ValidationSummary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1362435/
我正在使用 MVC,我有一个 Controller 操作可以处理多个不同的 View 模型,每个 View 模型都有验证,我希望 Controller 检查验证。 这是我的 Controller Ac
我能够让以下代码在服务器上运行,但不能在单元测试中运行。在单元测试中,简单属性设置正确,但子对象设置不正确。我已经用头撞墙太久了,所以欢迎任何建议。 Controller : [HttpPost] p
在我的查询字符串中,我得到了一堆参数名称和值。据我所知,我应该使用内置的 asp.net mvc 函数 TryUpdateModel(modelInstance)。 似乎它没有像我预期的那样工作。我的
有没有什么方法可以让 UpdateModel 或 TryUpdateModel 将货币或货币格式的值(例如 $1,200.00)解析为小数而不用大块? 最佳答案 使用自定义模型 Binder 。 An
VS2012、.NET 4.51 我有一个用户控件,其中包含一个使用模型绑定(bind)的 ListView。到目前为止,一切都很好。我想根据用户如何操作 View 模式来显示对象列表。为此,我有一个
我一直在使用 MVC4,我只需调用 TryUpdateModel(); 即可将我的实体更新到数据库 例子(MVC4) public ActionResult Edit(User user) {
在 MVC2 中,我曾经以一种在发布时从未使用过 FormCollection 对象的方式创建强类型 View 。我的签名总是这样: [AcceptVerbs(HttpVers.Post)] publ
我有基于 ASP.Net MVC3 的 Web 应用程序。我需要一个“创建” View ,在用户从下拉列表中选择要创建的子类型之前,该 View 不会知道模型类型。为了尝试解决这个问题,我在 Shar
在我的 Action 中,当我使用 TryUpdateModel 时出现 System.MissingMethodException 类型的错误。我在我的 Controller 中的几个地方使用它没有
我目前正在尝试测试使用 TryUpdateModel() 的插入方法。我正在伪造所需的 controllercontext,虽然它有效但似乎没有发布我设置的模型。 这是我正在测试的方法: [Acce
我有一些关于 asp.net mvc 开发的简单问题。 UpdateModel 和 TryUpdateModel 有什么用?以及哪个条件适用于使用 UpdateModel 或 TryUpdateMod
我知道你们大多数人会建议我应该使用特定于我正在使用的表单的 ViewModel,但我很好奇为什么我的子对象没有绑定(bind)到 TryUpdateModel。 @using (Html.BeginF
假设我们有一个名为 PetsName 的属性的类。如果它在屏幕上留空,我想更新值提供者,因此如果用户没有输入宠物名称,我们会强制使用“未命名”。这不是实际情况.. 这当然是一个示例,因此诸如“仅在网页
我在网络表单中有一个简单的表单 View 和简单的模型绑定(bind): ' runat="server">
这个有效: public ActionResult Save(int id, string name) { var profile = _profileRepository.GetById(i
给定以下 ASP.NET MVC Controller 代码: [HttpPost] public ActionResult Create(FormCollection collect
TryUpdateModel 是 System.Web.Mvc 中的方法之一,但我需要在没有此库的 Windows 应用程序中使用它。EF 中的任何类似方法或其他建议,以便我可以更新实体而无需将字段与
我似乎无法找到一个基本的代码示例来了解 TryUpdateModel 的工作原理?你什么时候使用它,为什么? 最佳答案 您可以使用此方法通过给定 Controller 更新支持特定 View 的模型。
我不明白,如何使用TryUpdateModel并同时保存MVC架构。 如果我没记错的话,数据上下文的工作必须在模型中进行。所以,这样的代码 var db=new TestEverybody();//i
我正在为 RC1 中的 Controller 编写一些单元测试。这里是我正在测试 Controller 的公共(public)签名: [AcceptVerbs(HttpVerbs.Po
我是一名优秀的程序员,十分优秀!