2

text_changed イベントまたはドロップダウン リストが変更されるたびにデータ ソースを更新するように設計されたフォームビューがあります。すべての text_changed イベントおよび他のコントロールの同等のイベントで、formView.UpdateItem メソッドを呼び出します。これにより、タブで移動したコントロールからフォームがフォーカスを失います。

このメソッドを実装しようとしましたが、2 回目にコントロールを選択しようとした後で、不明なランタイム エラーが発生しました。

これに対処する別の方法があると思わずにはいられません。

この問題をどのように解決しますか?

4

2 に答える 2

1

このような場合、javascript を使用して asp:Hidden コントロール (input type="hidden") に値を格納し、(javascript に) pageLoad 関数を追加してそのフィールドを解析し、フォーカスを設定することがよくあります。このようにして、フォーカスされたコントロールの ID がポストバックを通じて保持されます。

このようなもの(疑似コード):

<input type="hidden" id="focusHolder" />

function onSubmit (registered via ClientScript.RegisterOnSubmitStatemnet) {
grab the target and stash id in #focusHolder
}

function pageLoad() {
$get($get('focusHolder').value).focus();
}
于 2009-05-12T15:59:29.417 に答える
0

サーバー側でもできます。非同期ポストバックの原因となったコントロールにフォーカスを移す方法の例を次に示します。

    protected void Page_Load(object sender, EventArgs e)
    {
        if (IsPostBack)
        {
            if (ScriptManager.GetCurrent(Page).IsInAsyncPostBack)
            {
                string IDPostbackCtrl = GetAsyncPostBackControlID(Page, Page.Request);
                ScriptManager.GetCurrent(Page).SetFocus(IDPostbackCtrl);
            }
        }
    }

    public string GetAsyncPostBackControlID(Page page, HttpRequest request)
    {
        string smUniqueId = ScriptManager.GetCurrent(page).UniqueID;
        string smFieldValue = request.Form[smUniqueId];

        if (!String.IsNullOrEmpty(smFieldValue) && smFieldValue.Contains('|'))
            return smFieldValue.Split('|')[1];

        return String.Empty;
    }
于 2013-04-11T08:09:01.240 に答える