1

私は顧客のためのモデルを持っています

public class Customer
{
    public virtual int CustomerID { get; set; }

    [Required]
    public virtual string CustomerName { get; set; }

    [Required]
    public virtual string Title { get; set; }

    [Required]
    public virtual string FirstName { get; set; }

    public virtual string LastName { get; set; }

    // Cont..
}

public ActionResult Create(Customer customer)のアクションである顧客作成フォームを投稿すると、CustomerControllerに対してエラーが発生しModelStateます。たとえば...私のコードが以下のような場合。

[HttpPost]
public ActionResult Create(Customer customer)
{
    customer.Title = "Mr"; // This is what I set for ensuring the field has value

    if (ModelState.IsValid)
    {
        // Code to save customer entity
    }
    // else..
}

私のMVCビューでは、顧客タイトルにエラーが表示されます

たとえば、if (ModelState.IsValid)上記のコードからその部分を削除すると、顧客エンティティは正常に保存され、データベースにレコードを表示できます。

ここでの問題は何でしょうか?

編集 :

顧客タイトルを次のように渡すIEnumerable<SelectListItem>

ViewData["CustomerTitles"] = GetCustomerTitles();

ビュー内のコード

div class="editor-field">
    <%: Html.DropDownList("CustomerTitles")%>
    <br /><%: Html.ValidationMessageFor(model => model.Title) %>
</div>
4

2 に答える 2

0

これを試して:

<%: Html.DropDownList("Title", new SelectList(ViewData["CustomerTitles"]), Customer.Title.ToString()) %>

これにより、タイトルが文字列として渡されるはずです。これは、モデルが求めているものです。

于 2013-01-08T11:05:40.333 に答える
0

おかげで、@ Richard Aの返信からこの質問の答えを学びました。コードにいくつかの変更を加えたところ、正常に機能しました。

以下に投稿しますので、誰か助けになるかもしれません。

コントローラからのViewData

ViewData["Title"] = GetCustomerTitles(customer.Title);

意見

<div class="editor-field">
  <%: Html.DropDownList("Title") %>
  <br /><%: Html.ValidationMessageFor(model => model.Title) %>
</div>

アイデアは..エンティティでは、フィールド名は「タイトル」です。フォームが投稿された後、コンパイラは「Title」という名前のHTML要素をチェックし、その値を割り当てます。存在しない場合は、の値ModelStateをfalseに設定します。

于 2013-01-08T13:38:22.660 に答える