7

私はこのクラスを持っています:

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 に変更され、この問題が解決します。

これが私のロジック/構成の問題なのか、それともバグなのか予期された動作なのかを知っていますか?

4

5 に答える 5

9

MVC チームがこのバグを削除するときに、if (ModelState.IsValid)この行を使用して Id インデックスを削除する直前に、プロジェクトのこの行コードを削除するだけです。ModelState.Remove("Id")

于 2010-05-31T11:34:12.713 に答える
1

必須フィールドがありIdます。null 非許容であるため、必須です。(1) フォームと共に送信するか、(2) モデルを変更してIdnull 可能にするか、(3) 別の型を使用する必要があります。

于 2010-03-31T20:57:58.617 に答える
1

動作を使用して id インデックスを削除することを確認できますModelState.Remove("Id")

この疑惑の「バグ」について詳しい説明をしてくれる人はいますか?

Microsoft MVC チームの誰かが説明してくれるでしょうか?

ADO.NET Entity Data Model をデータ ソースとして使用する場合、このようなバグはありません。Linq To SQL でのみ発生します。

于 2010-11-16T10:30:15.587 に答える
0

もう 1 つの理由として次のことが考えられます。

キーをStringなどの数値以外の型として宣言すると、デフォルトではキーを自動生成できないため、このエラーが発生します。

于 2012-08-03T05:18:09.290 に答える
0

問題は、モデルで「id」という名前のプロパティを使用していることです。別の名前を使用してみてください。動作することがわかります。Mvcには問題があるようです。

まったく同じ問題が発生しました。

于 2010-05-28T18:44:40.797 に答える