2009-06-18 23 views
0

ASP.Net MVCの検証メッセージで把握しようとしています。私はその後、姓のフィールドが空白の場合、エラーメッセージを表示するようになっている私のコントローラで、このPOSTメソッドを持ってASP.Net MVCと検証メッセージ

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

<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server"> 

    <h2>Create User</h2> 

    <%= Html.ValidationSummary("Create was unsuccessful. Please correct the errors and try again.") %> 

    <% using (Html.BeginForm()) {%> 

     <fieldset> 
      <legend>Fields</legend> 
      <p> 
       Username : <%= Html.TextBox("Username") %> 
      </p> 
      <p> 
       Forename : <%= Html.TextBox("Forename") %> 
       <%= Html.ValidationMessage("Forename", "*") %> 
      </p> 
      <p> 
       Surname : <%= Html.TextBox("Surname","") %> 
       <%= Html.ValidationMessage("Surname", "*") %> 
      </p> 
      <p> 
       <input type="submit" value="Create" /> 
      </p> 
     </fieldset> 

    <% } %> 

    <div> 
     <%=Html.ActionLink("Back to List", "Index") %> 
    </div> 

</asp:Content> 

<asp:Content ID="Content2" ContentPlaceHolderID="head" runat="server"> 
    <title><%= ViewData["ProjectTitle"] %> - Create User</title> 
</asp:Content> 

次のビューを持って、私はちょうどしようと、この機能イムには、他のロジックはありません実現します私の頭の中で検証する。私はこれを実行すると、インクルードメソッドが正常に実行され、エラーが追加されますが、そのアプリケーションが転倒作成、ユーザーを保存するためにクリックすると

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Create(FormCollection formValues) 
    { 
     if (formValues["Surname"] == string.Empty) 
      ViewData.ModelState.AddModelError("Surname", "No way"); 
     return View("Create"); 
    } 

は、それは姓のテキストボックスを作成し、「未言うビュー内の行をhightlightsオブジェクトのインスタンスに設定します。私は姓のテキストボックスに何かを入れて、エラーが追加されない場合、それは正常に実行されます。

私は本当にシンプルなものを見逃していると思っていますが、何ができるのでしょうか。

アイデア?

おかげで

ギャビン

+0

にNULLまたは空のためにテストする必要がありますか? –

+0

それはこの行で起こります姓:<%= Html.TextBox( "Surname"、 "")%> – Gavin

+0

うーん、私は2番目の引数のためだと思います。 ViewDataでキー(空)が検索され、オブジェクト参照がスローされます。 –

答えて

0

ようになり

Surname : <%= Html.TextBox("Surname","") %> 

ニーズ下の行私はエラーがそれを作る設定する行上記の私の方法を以下setModelValueラインを追加し解決策を見つけたと思います作業。

  ModelState.SetModelValue("Username", new ValueProviderResult(ValueProvider["Username"].AttemptedValue, formValues["Username"], System.Globalization.CultureInfo.CurrentCulture)); 
      ModelState.AddModelError("Username", "Invalid Username"); 

これは私がこの回答の明日を受け入れるだろうされていない場合それは、素晴らしいことだ作品、なぜ誰もが説明できる場合。私は本当にしなければならない限り、私はこれまでのフィールドでこれを行う必要はないと確信しています。

1

あなたは、テキストボックスの2番目の引数を削除しようとしましたか? ViewDataの空のキーを探します。

Surname : <%= Html.TextBox("Surname") %> 
+0

ええ、それは<%= Html.TextBox( "姓")%> – RichardOD

+0

である必要がありますこれは私が最初にそれを持っていた方法です、私はそれを修正するかどうかを確認するためにエラーを最初に取得したときに変更しましたが、 – Gavin

+0

hmm。面白い。この場合、オブジェクト参照を与える必要があります。 forenameフィールドの検証コントロールを変更しようとする可能性があります。姓を削除し、forenameのためにそれを試してみませんか?同じ場合が発生しますか?ところで、 –

-1

あなたは、「オブジェクトのインスタンスに設定されていません」のメッセージが置かれているあなたのif文、

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Create(string Username, string Surname, string Forename) 
{ 
    if (String.IsNullOrEmpty(Surname)) 
    { 
    ModelState.AddModelError("Surname", "No way"); 
    } 

    return View(); 
}