1

ASP.NET MVC では、[HttpPost] メソッドで、MVC ランタイムがフィールド名に基づいて、フロント エンドのフォーム フィールドからビュー モデルにデータを自動的にマップして転送します。

ASP.NET WebForm で同じことを達成するにはどうすればよいですか?

たとえば、FirstName プロパティと LastName プロパティを持つ Person というオブジェクトがあります。

FirstName と LastName の Textbox コントロールを含む WebForm ページがあります。

フォームで [送信] を押すと、分離コードの Button_Click イベントで FirstName と LastName を Person オブジェクトに自動的にバインドする方法はありますか?

4

4 に答える 4

5

ASP.net 4.5には、実際にはWebフォームモデルバインディングが組み込まれています。

Guにはそれに関する投稿と他のいくつかのことがここにあります...

http://weblogs.asp.net/scottgu/archive/2011/09/05/web-forms-model-binding-part-1-selecting-data-asp-net-vnext-series.aspx

于 2012-05-01T03:03:43.540 に答える
4

これは、モデル バインディングを使用して webforms v4.5 で行うことができます。これは、フォームビューなどのデータ バインド コントロールを使用せずにコントロールにバインドできる Ad-Hoc Model Binding と呼ばれる方法です。私はそれについてブログを書く予定ですが、次のコードはブログを簡単に説明しています

マークアップは次のようになります。モデルには名前と説明の 2 つのプロパティがあります

Name<input type="text" name="Name" value=" " id="Name"      />   
<br />

Description<input type="text" name="Description" value=" " id="Description"    />
<br />
<asp:Button Text="Submit" runat="server" OnClick="Unnamed_Click" />

以下は、ボタン クリック ハンドラのコードです。カテゴリは私のモデルです。この場合、モデル バインディング システムは、フォーム コレクションを参照するフォーム値プロバイダーから値を取得します。

var category = new Category();
var formValueProvider = new FormValueProvider(ModelBindingExecutionContext);            

TryUpdateModel(category, formValueProvider);

if (ModelState.IsValid)
{
     // save changes to database
}
于 2012-12-22T03:54:12.047 に答える
0

おそらく最も簡単な方法は、ポストバックである場合は常に、Page_Loadイベントで値を明示的に割り当てることです。このようなもの:

if (this.IsPostBack)
{
    person.FirstName = FirstNameTextBox.Text;
    person.LastName = LastNameTextBox.Text;
}

それとも、より宣言的なアプローチを探していましたか?

于 2012-05-01T03:00:34.760 に答える
0

Model Binder for ASP.NET Web Forms を見てください。それはあなたが望むことをしています-そのプロパティに適用されたカスタム属性を介してポストバックデータをクラスにマップします。

于 2012-06-12T21:19:23.473 に答える