Asp.net-Mvc-2
ASP.MVC 2 RTM + Id 屬性處的 ModelState 錯誤
我有這個課程:
public class GroupMetadata { [HiddenInput(DisplayValue = false)] public int Id { get; set; } [Required] public string Name { get; set; } } [MetadataType(typeof(GrupoMetadata))] public partial class Group { public virtual int Id { get; set; } public virtual string Name { get; set; } }而這個動作:
[HttpPost] public ActionResult Edit(Group group) { if (ModelState.IsValid) { // Logic to save return RedirectToAction("Index"); } return View(group); }這就是我的看法:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<Group>" %> <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> <% using (Html.BeginForm()) {%> <fieldset> <%= Html.EditorForModel() %> <p> <input type="submit" value="Save" /> </p> </fieldset> <% } %> <div> <%=Html.ActionLink("Back", "Index") %> </div> </asp:Content>但是 ModelState 總是無效的!正如我所看到的,對於 MVC 驗證 0 是無效的,但對我來說是有效的。我該如何解決它,因為我沒有在 Id 屬性中進行任何類型的驗證?
更新: 我不知道如何或為什麼,但在我的情況下將 Id 重命名為 PK 可以解決這個問題。
您知道這是我的邏輯/配置中的問題還是錯誤或預期行為?
就在MVC 團隊刪除此錯誤時,
if (ModelState.IsValid)使用此行以這種方式刪除 Id 索引之前ModelState.Remove("Id"),您只需刪除項目的此行程式碼。
您有一個必填欄位,
Id. 它是必需的,因為它不可為空。您必須 (1) 將其與您的表單一起送出或 (2) 更改您的模型以使其可為Id空或 (3) 使用不同的類型。