6

ASP.NET 4.5 WebForms 内の新しい厳密に型指定されたモデル バインディング アプローチの調査:

Scott Hanselman の WebForms モデル バインディングの例DynamicControls (とりわけ) で、「編集」モードで開く FormView の使用を見てきました。

<asp:FormView runat="server" ID="MyForm" ... DefaultMode="Edit">
  <EditItemTemplate>
    <asp:DynamicControl runat="server" ID="Field1" DataField="Field1" Mode="Edit" />
    <asp:DynamicControl runat="server" ID="Field2" DataField="Field2" Mode="Edit" />
  </EditItemTemplate>
</asp:FormView> 

私の状況では、ItemTemplate のコントロールが "ReadOnly" モードになることを除いて、私の FormView の とItemTemplateは同じです。EditItemTemplateInsertItemTemplate

FormView 内のテンプレートの 3 つのほぼ同一のコピーを (まだ) 本当に提供する必要がありますか?

私は DynamicControls を喜んで使用しますが、ここのチームは、FormView、特に大きなテンプレートに必要と思われる「3 回のコピーと貼り付け」のアプローチを採用することは決してありません。

私はおそらく次のように考えていました:

  • DynamicControls は、含まれている FormView から「モード」を取得できますか?
  • FormView 以外のものを使用して、DynamicControls を含めることはできますか?
  • テンプレートの重複を避けるために、コード ビハインドで DynamicControls のモードを管理する必要がありますか?

例/アイデアはありますか?

4

3 に答える 3

1

いいえ、3 つのテンプレートすべてを指定する必要はありません。私は同じシナリオを持っていましたが、これが私の解決策です:

  • デフォルトモードを最も頻繁に使用されるモードに設定します
  • 次に、フォームのコードビハインドでフォームモードを管理します
  • コード ビハインドでテンプレートをコピーします。たとえば、EditTemplate を必要な他のテンプレートにハンドコードします。

    protected void Page_Init()
    {
        var action = RouteData.Values["action"].ToString();
    
        switch (action)
        {
            case "add":
                personForm.ChangeMode(FormViewMode.Insert);
                this.Page.Title += " Add";
                break;
            case "edit":
                personForm.ChangeMode(FormViewMode.Edit);
                this.Page.Title += " Change";
                break;
            default:
                personForm.ChangeMode(FormViewMode.ReadOnly);
                break;
        }
    
        // Reuse inserttemplate for editing
        if (personForm.CurrentMode == FormViewMode.Edit)
        {
            personForm.EditItemTemplate = personForm.InsertItemTemplate;
        }
    
    }
    
于 2014-05-23T12:39:27.070 に答える
0

AutoGenerateEditButton="true" を設定するだけです。アイテム テンプレートのすべての入力タイプが編集可能になります。jQueryを使用して、テキストボックスの境界線と他の入力タイプを表示/非表示にする必要がある場合があります。

于 2013-05-02T04:24:19.307 に答える