0

次のような単純な MVC モデルがあります。

public class SomeClass
{
    public int Id { get; set; }

    [Required(ErrorMessage = "Please provide a name for the blah blah blah")]
    public string Name { get; set; }
}

...そして、私は次のようなビューを持っています(簡略化):

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<CompanyName.Web.Models.SomeClassViewModel>" %>

<form method="post" action="/someclass/add">
    <%=Html.HiddenFor(m => m.SomeClass.Id)%>

    <div>
        <%=Html.LabelFor(m => m.SomeClass.Name)%>
        <%=Html.TextBoxFor(m => m.SomeClass.Name, new { @class = "form-medium" })%>
    </div>
</form>

ModelStateフォームの送信時に、コントローラーは次のように検証します。

[HttpPost]
public ActionResult Add(Models.SomeClassViewModel model)
{
    if (ModelState.IsValid)
    {
        ...
    }
}

次のモデル検証エラーが発生します

「ID フィールドは必須です。」

なぜこれが起こっているのですか?

フィールドはデフォルトで 0 に割り当てられ(Id当然のことですが)、レコード作成のためにデータ層に渡されるため、何が問題なのかわかりません。

どんな助けでも大歓迎です。

4

3 に答える 3

1

わかりましたので、問題がわかりました。

ビュー モデル クラス ('SomeClassViewModel') のコンストラクター内に、'SomeClass' プロパティの既定のコンストラクターを呼び出すコード行を追加しました。

「Id」検証キーの ModelState エラーを調べることでこれを理解し、「AttemptedValue」プロパティが空の文字列であることがわかりました。これは 0 である必要があります。このプロパティを「SomeClass」のインスタンスにインスタンス化すると、修正されました。

これが同じ問題を抱えている可能性のある人に役立つことを願っています!

于 2013-02-27T09:46:05.540 に答える
0

Id 変数の名前を変更したり、データ型を文字列に変更したりするとどうなりますか?

于 2013-02-26T16:56:35.967 に答える
0

Models.SomeClassViewModelクラスにもId同じ型と変数名のフィールドがあることを確認してください。

そうでない場合は、これを試すこともできます。

[HttpPost]
public ActionResult Add(SomeClass model)
{
    if (ModelState.IsValid)
    {
        ...
    }
}
于 2013-02-26T16:56:53.343 に答える