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が表示されませんが、値はテキストボックスにそのまま残ります。
私はDisplayForが同じことをしたと思っていましたが、私はHiddenForを試して、同じ結果を得ました - 親ID = 0は投稿機能にあります。 – gfrizzle
@gfrizzle、DisplayForはラベルを生成しません。あなたのHTMLはどのように見えますか?ソースを見てください。通常、 ''を参照する必要があります。それはあなたがPOSTアクションで取り戻す価値です。 –
HiddenForは確かにID値を保持しますが、私は私の究極の問題は親自体にあると思います。これらのテーブルは、LINQ to SQLクラスにあります。つまり、「parent_id」フィールドに加えて「Parent」という名前のオブジェクトがあります。 ModelStateをドリルダウンすると、 "parent_id"と "start_date"のキーと値のペアが期待通りに表示されますが、 "Parent"のものも表示され、 "Parent"を文字列値に設定しようとしているようですparent_idと等価です。すなわち、 'Parent = "2"'を実行しようとしています。その結果、ModelStateは無効です。最初にgetコントローラを設定しないのですか? – gfrizzle