2012-03-20 14 views
0

MVC3 .NET4.0(VB)を使用していますが、単純なビューで奇妙な動作が見られます。値が維持されずに検証エラーが発生しました

Inherits="System.Web.Mvc.ViewPage(Of MyProject.MyTable) 

コントローラはかなり簡単です。このビューは、次のように設定されています。これは、このレコードが追加されるために親レコードのIDを受け付けます

Function Create(parent As Integer) As ActionResult 
    Return View(New MyTable With {.parent_id = parent}) 
End Function 

ビューは、他のものの間で日付を受け付けますが、それはこれに沸く:

<% Using Html.BeginForm()%> 
<%=Html.ValidationSummary(True)%> 
<%=Html.DisplayFor(Function(model) model.parent_id)%> 
<%=Html.TextBoxFor(Function(model) model.start_date)%> 
<%=Html.ValidationMessageFor(Function(model) model.start_date, "*")%> 
<button type="submit" id="submitButton">Save</button> 
<% End Using%> 

私はそう、今私のポスト・コントローラは、単にエラーをチェックして、あまり他にやっていない、日付のエラーの処理をテスト:

<HttpPost()> 
Function Create(model As MyTable) As ActionResult 
    If ModelState.IsValid Then 
     Return RedirectToAction("Index") 
    Else 
     Return View(model) 
    End If 
End Function 

私は最初のビューをロードすると、私は、フォーム上に表示された親IDを参照してください。開始日フィールドに悪い日付を入れてSubmitを押すと、無効な値が強調表示されたフォームが返されますが、親ID = 0になります。投稿のコードを壊した場合、 "model"親IDが設定されています。これは明らかに、私は本質的に親を失ってしまったので、あらゆる種類の問題を引き起こします。私は間違って何をしていますか?ダーリンの提案パー

UPDATE

私はHiddenForにDisplayForを変更し、任意の違いを見ていません。だから、私はTextBoxForを試してみて、見知らぬ結果を得ました。投稿機能に親IDが表示されませんが、値はテキストボックスにそのまま残ります。

答えて

0

私は間違っていますか?

フォームに非表示フィールドとしてparent_idは含まれていません。あなたのフォームの中には、start_dateフィールドに対応する1つの入力要素があります。そのため、あなたはPOSTアクションで得ることができるすべてです。だから、

:あなたが唯一の値を表示し、それはフォームが送信されるときにサーバーにこの値を輸送するために、任意の入力フィールドを排出しない使用

<%= Html.HiddenFor(Function(model) model.parent_id) %> 

DisplayFor

+0

私はDisplayForが同じことをしたと思っていましたが、私はHiddenForを試して、同じ結果を得ました - 親ID = 0は投稿機能にあります。 – gfrizzle

+0

@gfrizzle、DisplayForはラベルを生成しません。あなたのHTMLはどのように見えますか?ソースを見てください。通常、 ''を参照する必要があります。それはあなたがPOSTアクションで取り戻す価値です。 –

+0

HiddenForは確かにID値を保持しますが、私は私の究極の問題は親自体にあると思います。これらのテーブルは、LINQ to SQLクラスにあります。つまり、「parent_id」フィールドに加えて「Parent」という名前のオブジェクトがあります。 ModelStateをドリルダウンすると、 "parent_id"と "start_date"のキーと値のペアが期待通りに表示されますが、 "Parent"のものも表示され、 "Parent"を文字列値に設定しようとしているようですparent_idと等価です。すなわち、 'Parent = "2"'を実行しようとしています。その結果、ModelStateは無効です。最初にgetコントローラを設定しないのですか? – gfrizzle

関連する問題