У меня есть это классы:
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?
ОБНОВЛЕНИЕ: Я не знаю, как или почему, но идентификатор переименования, в моем случае к PK, решает эту проблему.
Вы знаете, является ли это проблема в моей логике/конфигурации или ошибкой или ожидаемым поведением?
Непосредственно перед if (ModelState.IsValid)
удалить индекс Id, используя эту строку ModelState.Remove ("Id")
таким образом, когда команда MVC удаляет эта ошибка, вам просто нужно удалить этот строковый код ваших проектов.
У вас есть обязательное поле, Id
. Это необходимо, потому что не допускает значения NULL. Вы должны либо (1) отправить его вместе с формой, либо (2) изменить модель, чтобы сделать Id
обнуляемым, либо (3) использовать другой тип.
Ваша проблема в том, что вы используете свойство с именем 'id' в вашей модели. Попробуйте использовать другое имя, и вы увидите, что оно работает. Похоже, что у Mvc с этим проблемы.
У меня возникла точно такая же проблема.