Asp.net-Mvc-2

ASP.MVC 2 RTM + Id 屬性處的 ModelState 錯誤

  • October 16, 2015

我有這個課程:

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) 使用不同的類型。

引用自:https://stackoverflow.com/questions/2555677