2009-05-30 3 views
0

Html.BeginForm()によって作成されたASP.Net MVCフォームを持っていると、その内部のフィールドはどのように設定されますか?フォームはASP.Net MVCでどのように事前入力されていますか?

<asp:Content ID="Main" ContentPlaceHolderID="MainContent" runat="server"> 
<h2>Edit Dinner</h2> 
<%= Html.ValidationSummary("Please correct the errors and try again.") %> 
<% using (Html.BeginForm()) { %> 
    <p> 
     <label for="Title">Dinner Title:</label> 
     <%= Html.TextBox("Title") %> 
     <%= Html.ValidationMessage("Title", "*") %> 
    </p> 

ここで、Html.TextBox( "Title")の値はどこから来ますか?私は知っている、モデル。この場合、モデルにはタイトルフィールドがあります。

public class DinnerViewModel { 
    public Dinner Dinner {get; set;}; 
    public SomethingElse SomethingElse {get; set;}; 
} 

やモデルとして、<% = Html.TextBox(「タイトル」)%>が取得することを使用します。しかし、私は私のようなものを持ってしまうので、ビューモデルを作成する必要がケースを持っています正しい値。あるいは、検証が失敗し、フォームが再表示された場合は少なくとも実行されます。

私は、AJAX(Ajax.BeginForm()を使用して)を介して送信されているフォームのケースがあり、フォームがリフレッシュされるため、質問しています。空のモデルオブジェクトを作成していますが、それでもまだ最後のサブミットの値がロードされています。私がAJAXなしで提出すると、すべて正常に動作します。

更新

私は、テンプレート内のデバッガを見ています。 Model.Dinner.Titleは ""と同じですが、Html.TextArea( "Title"、Model.Dinner.Title)はテキスト領域内に送信された前の値を置きます。

答えて

2

データはModelStateに格納されます。 HtmlHelperメソッドは、フォーム要素の名前に基づいてモデル状態に格納された値を検索します。リダイレクトするとModelStateがきれいになりますが、AJAX呼び出しの場合のように返されたときには復帰しません。

0

また、空に値を強制することができます。

<% =Html.TextBox("Title", null, new { @value = '' }); %> 

ビューに空のモデル(デフォルト値)を渡すためにかかわらず、それは良いでしょうか? EDITこれはあなたがやっていることです;)。私の最初の提案に行き、リクエストがAJAXリクエストかどうかを確認し、それに基づいてemptpy @valueをTextBoxに渡します。

+0

空のモデルをビューに渡しています。 – Pablo

0

私はこの問題を理解しています。あなたはajaxリクエストを行いますが、あなたのフォームのテキストフィールドは呼び出しの後でも値を保持していますか?

この場合、これらのテキストフィールドが、AjaxOptionクラスのUpdateTargetIdプロパティに関連付けられている要素内にあることを確認する必要があります。 Ajaxリクエストを行うと、ページの一部のみが更新されます(UpdateTargetIdプロパティで参照されるもの)。あなたのモデルを更新するかどうかに関わらず、ページの残りのフィールドは更新されません。この例を見てください:

ajaxフォームを送信すると、SomeFieldフィールドのみが更新され、タイトルフィールドは変更されません。

通常のフォームを送信すると、ページ全体が更新されるため、すべてのフィールドがajaxなしで更新されるのはこのためです。

EDIT: Typo。

関連する問題