2

一見非常に単純に見えるものが機能していません。

私はモデルを持っています

public class Name: Entity
{
    [StringLength(10), Required]
    public virtual string Title { get; set; }
}

public class Customer: Entity
{
    public virtual Name Name { get; set; }
}

ビューモデル

public class CustomerViweModel
{
    public Customer Customer { get; set; }
}

ビュー

       <% using(Html.BeginForm()) { %>
                    <%= Html.LabelFor(m => m.Customer.Name.Title)%>
                    <%= Html.TextBoxFor(m => m.Customer.Name.Title)%> 
                    <button type="submit">Submit</button>
        <% } %>

そしてコントローラー

[HttpPost]
public ActionResult Index([Bind(Prefix = "Customer")] Customer customer)
{
      if(ModelState.IsValid)
           Save
       else
           return View();
 }

タイトルとして何を入力しても (null、または 10 文字を超える文字列)、ModelState.IsValid は常に true です。Customer オブジェクトの Title フィールドに値があるため、データは渡されますが、検証されませんか?

手がかりはありますか?

4

2 に答える 2

5

ビューには、データをコントローラーに送信できるテキストボックスやフィールドは表示されず、ラベルのみが表示されます。投稿されていない場合、プロパティは検証されません。テキストボックスを追加し、空白のままにすると、モデルは無効になります。

<%= Html.TextBoxFor(m => m.Customer.Name.Title)%>

アップデート:

これが私が使用したコードです:

モデル:

public class Name
{
    [StringLength(10), Required]
    public virtual string Title { get; set; }
}

public class Customer
{
    public virtual Name Name { get; set; }
}

public class CustomerViewModel
{
    public Customer Customer { get; set; }
}

コントローラ:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Index([Bind(Prefix = "Customer")]Customer cs)
    {
        return View(new CustomerViewModel
        {
            Customer = cs
        });
    }
}

意見:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MyApp.Models.CustomerViewModel>" %>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <% using(Html.BeginForm()) { %>
        <%= Html.LabelFor(m => m.Customer.Name.Title)%>
        <%= Html.TextBoxFor(m => m.Customer.Name.Title)%> 
        <button type="submit">Submit</button>
    <% } %>
</asp:Content>

このフォームを送信すると、検証エラーが表示されます。

Entity備考1:見た目がよくないので、モデルの基本クラスを省略しました。

備考2:インデックスアクションの変数の名前をに変更しましたcs。プレフィックスと同じ名前の変数がある場合、ASP.NET MVC 1.0でこれにいくつかの問題があったことを覚えていますが、これがここに適用されるかどうかはわかりません。修正されたと思います。

于 2010-04-17T16:45:05.547 に答える
0

それを理解したのは、3.5 ではなく System.ComponentModel.DataAnnotations 3.6 を参照しているからです。私が収集したところによると、3.6 は WCF RIA サービス専用です。

于 2010-04-18T09:48:32.943 に答える