C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: FormViewでAJAX Controlでエラー


(過去ログ 91 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■54479 / inTopicNo.1)  FormViewでAJAX Controlでエラー
  
□投稿者/ taco (1回)-(2010/10/22(Fri) 01:23:44)

分類:[ASP.NET (VB)] 

調べたのですがよく分からない事があり、お知恵を貸して頂きたく
書き込みしました。

Visual Studio 2010で、VBを使用してWebアプリを作っています(.NETは4です)。

FormViewに、AJAX ControlToolKitのCalendarExtenderを配置した時に上手く
動かす事ができず困っています。

・WebFormに、FormViewを追加。
 「日付型のデータ」を含むデータベースをデータソースに指定。

・FormViewのEditのTemplateを編集。
 「日付型のデータ」にバインドされたTextBoxにCalendarExtenderを設定。


これで実行すると、FormViewをEditモードに切り替えた時にエラーとなります。
(Insertも同様)


ちなみに、ReadOnlyモードの「日付型のデータ」にバインドされたラベルを
TextBoxに置き換えてCalendarExtenderを設定すると問題なく動作しますので、、
ページがロードされた時に、AJAXのコントロールは、ReadOnlyモードのみ、
実体が作られて、その後EditやInsertに切り替えてもCalendarExtenderの実体
が作成されていないと推測したのですが、対処方法が分かりません。

どなたか解決方法をご存じないでしょうか?(ちなみに、FormViewのデフォルトを
、Editにしてみましたが、駄目でした。)
引用返信 編集キー/
■54480 / inTopicNo.2)  Re[1]: FormViewでAJAX Controlでエラー
□投稿者/ もりお (296回)-(2010/10/22(Fri) 06:26:05)
No54479 (taco さん) に返信

> ちなみに、ReadOnlyモードの「日付型のデータ」にバインドされたラベルを
> TextBoxに置き換えてCalendarExtenderを設定すると問題なく動作しますので、、

ReadOnly モードというのは FormView.DefaultMode プロパティのことでしょうか。
CalendarExtender コントロールは、ItemTemplate に TextBox を配置すると、正常
に動作するという状況ですかね。

> その後EditやInsertに切り替えてもCalendarExtenderの実体
> が作成されていないと推測したのですが、対処方法が分かりません。

EditItemTemplate に CalendarExtender コントロールを配置しているならば。
CalendarExtender コントロールは、FormView が Edit モードに移行する段階に
おいて、作成されるはずなのですが。うーむ。
エラーメッセージは、どのようなものが、出力されますか?

引用返信 編集キー/
■54516 / inTopicNo.3)  Re[2]: FormViewでAJAX Controlでエラー
□投稿者/ taco (2回)-(2010/10/23(Sat) 01:20:17)
No54480 (もりお さん) に返信

ご返答有り難う御座います。

> ReadOnly モードというのは FormView.DefaultMode プロパティのことでしょうか。
> CalendarExtender コントロールは、ItemTemplate に TextBox を配置すると、正常
> に動作するという状況ですかね。

はい、ItemTemplateの事です。

デフォルトではラベルが配置されて値がバインドされていますが、(ラベルはCalendarExtender
を設定する事が出来ないため)、ラベルをTextBoxに置き換えてCalendarExtenderを設定したら
正常に動作しました。

(EditItemTemplate等で正常に動作しないので、確認のため上記を試しました。
また、WebFormに直接、TextBoxを設置する等、FormView外でも正常に動作しています。)


> EditItemTemplate に CalendarExtender コントロールを配置しているならば。
> CalendarExtender コントロールは、FormView が Edit モードに移行する段階に
> おいて、作成されるはずなのですが。うーむ。
> エラーメッセージは、どのようなものが、出力されますか?

同様にEditItemTemplateやInsertItemTemplateのTextBox(こちらはデフォルトで配置された物)に、
CalendarExtenderを設定して、ItemTemplateの「編集」「新規作成」のリンクボタンをクリックして、
モードを切り替えようとすると下記のエラーが起こります。


■VS2010で、「ソースファイルの検索 「ScriptObjectBuilder.cs」」のダイアログが開く。

★ダウンロードしたControlToolKitのソースから「ScriptObjectBuilder.cs」を指定すると下記のエラー

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
System.Resources.MissingManifestResourceException はユーザー コードによってハンドルされませんでした。
Message=指定されたカルチャまたはニュートラル カルチャに対して適切なリソースが見つかりませんでした。"AjaxControlToolkit.Properties.Resources.NET4.resources" が適切に埋め込まれたか、実行時にアセンブリ "AjaxControlToolkit" にリンクされたか、または必要なサテライト アセンブリが読み込まれて完全に署名されていることを確認してください。
Source=mscorlib
StackTrace:
場所 System.Resources.ManifestBasedResourceGroveler.HandleResourceStreamMissing(String fileName)
場所 System.Resources.ManifestBasedResourceGroveler.GrovelForResourceSet(CultureInfo culture, Dictionary`2 localResourceSets, Boolean tryParents, Boolean createIfNotExists, StackCrawlMark& stackMark)
場所 System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo requestedCulture, Boolean createIfNotExists, Boolean tryParents, StackCrawlMark& stackMark)
場所 System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo culture, Boolean createIfNotExists, Boolean tryParents)
場所 System.Resources.ResourceManager.GetString(String name, CultureInfo culture)
場所 AjaxControlToolkit.Properties.Resources_NET4.get_E_NoScriptManager() 場所 d:\hg\act\Server\AjaxControlToolkit\Properties\Resources.NET4.Designer.cs:行 68
場所 AjaxControlToolkit.ScriptObjectBuilder.RegisterCssReferences(Control control) 場所 d:\hg\act\Server\AjaxControlToolkit\ExtenderBase\ScriptObjectBuilder.cs:行 332
場所 AjaxControlToolkit.ExtenderControlBase.OnLoad(EventArgs e) 場所 d:\hg\act\Server\AjaxControlToolkit\ExtenderBase\ExtenderControlBase.cs:行 305
場所 System.Web.UI.Control.LoadRecursive()
場所 System.Web.UI.Control.LoadRecursive()
場所 System.Web.UI.Control.AddedControl(Control control, Int32 index)
場所 System.Web.UI.ControlCollection.Add(Control child)
場所 System.Web.UI.WebControls.TableRow.CellControlCollection.Add(Control child)
場所 System.Web.UI.ControlCollection.AddAt(Int32 index, Control child)
場所 System.Web.UI.WebControls.TableRow.CellControlCollection.AddAt(Int32 index, Control child)
場所 System.Web.UI.WebControls.TableCellCollection.Add(TableCell cell)
場所 System.Web.UI.WebControls.FormView.InitializeRow(FormViewRow row)
場所 System.Web.UI.WebControls.FormView.CreateDataRowFromTemplates(Boolean dataBinding, TableRowCollection rows)
場所 System.Web.UI.WebControls.FormView.CreateDataRow(Boolean dataBinding, TableRowCollection rows, Object dataItem)
場所 System.Web.UI.WebControls.FormView.CreateChildControls(IEnumerable dataSource, Boolean dataBinding)
場所 System.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding(IEnumerable data)
場所 System.Web.UI.WebControls.FormView.PerformDataBinding(IEnumerable data)
場所 System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable data)
場所 System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback)
場所 System.Web.UI.WebControls.DataBoundControl.PerformSelect()
場所 System.Web.UI.WebControls.BaseDataBoundControl.DataBind()
場所 System.Web.UI.WebControls.FormView.DataBind()
場所 System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound()
場所 System.Web.UI.WebControls.FormView.EnsureDataBound()
場所 System.Web.UI.WebControls.BaseDataBoundControl.OnPreRender(EventArgs e)
場所 System.Web.UI.Control.PreRenderRecursiveInternal()
場所 System.Web.UI.Control.PreRenderRecursiveInternal()
場所 System.Web.UI.Control.PreRenderRecursiveInternal()
場所 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
InnerException:
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑


★ソースコードを指定しないと、

----------------------
Microsoft JScript 実行時エラー: Sys.ArgumentException: Value must not be null for Controls and Behaviors.
Parameter name: element

が表示され、下記で止まっています。

----------------------
ScriptResource.axd・・・ (略)[動的]
----------------------
(略)

var e = Function._validateParams(arguments, [
{name: "type", type: Type},
{name: "properties", mayBeNull: true, optional: true},
{name: "events", mayBeNull: true, optional: true},
{name: "references", mayBeNull: true, optional: true},
{name: "element", mayBeNull: true, domElement: true, optional: true}
]);
if (e) throw e;
if (type.inheritsFrom(Sys.UI.Behavior) || type.inheritsFrom(Sys.UI.Control)) {
if (!element) throw Error.argument('element', Sys.Res.createNoDom);   ←ここで停止
}
else if (element) throw Error.argument('element', Sys.Res.createComponentOnDom);
var component = (element ? new type(element): new type());
callIf(component, "beginUpdate");
if (properties) {
Sys.Component._setProperties(component, properties);
}

(略)
----------------------


検証用のプロジェクトを作成して、一切コードを書かないで実行した状態ですので…
ContorlToolKitの不具合でしょうか…



引用返信 編集キー/
■54518 / inTopicNo.4)  Re[3]: FormViewでAJAX Controlでエラー
□投稿者/ もりお (297回)-(2010/10/23(Sat) 06:58:39)
No54516 (taco さん) に返信

> Microsoft JScript 実行時エラー: Sys.ArgumentException: Value must not be null for Controls and Behaviors.
> Parameter name: element

クライアント側の CalendarExtender コントロールが作成される際に、関連付ける
TextBox コントロールを参照できないということかしら。
さて、私の環境では、困ったことにエラーを再現できませんでした。
エラーは、以下のコードでも、発生しますか?

<%@ Page Language="vb" AutoEventWireup="false" %>
<script runat="server">
  Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    formView1.DataSource = New DateTime() {DateTime.Now}
    formView1.DataBind()
  End Sub
</script>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head id="Head1" runat="server">
    <title></title>
  </head>
  <body>
    <form id="form1" runat="server">
      <asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
      </asp:ToolkitScriptManager>
      <asp:FormView ID="formView1" runat="server" DefaultMode="Edit">
        <EditItemTemplate>
          <asp:TextBox ID="dateTextBox" runat="server" Text='<%# Container.DataItem %>' />
          <asp:CalendarExtender ID="calendarExtender1" runat="server" TargetControlID="dateTextBox" />
        </EditItemTemplate>
      </asp:FormView>
    </form>
  </body>
</html>

引用返信 編集キー/
■54544 / inTopicNo.5)  Re[4]: FormViewでAJAX Controlでエラー
□投稿者/ taco (3回)-(2010/10/26(Tue) 03:19:35)
No54518 (もりお さん) に返信

上記のコードを実行した所、問題なく動作しました。
ん?EditItemTempateでも動作する時もある…

データベースのデータの名前が全角だったのが原因でした。
半角英数字にしたら何事もなく動きました。

「検証用のプロジェクトで一切コードを書かなかった事」「全く動かないのではなく、
モードがReadOnlyの時はきちんと動いた事」などから、なかなか原因が分かりませんでした。
(ContorlToolKitの不具合と言っても良い気もしますが…)

ご助言、有り難う御座いました。
解決済み
引用返信 編集キー/
■54545 / inTopicNo.6)  Re[5]: FormViewでAJAX Controlでエラー
□投稿者/ もりお (298回)-(2010/10/26(Tue) 06:39:37)
No54544 (taco さん) に返信

> データベースのデータの名前が全角だったのが原因でした。
> 半角英数字にしたら何事もなく動きました。

私の環境においても、エラーを再現することができました。
FormView コントロールを自動的に構成する場合。
FormView 内の TextBox の ID プロパティは、データベースのカラム名を参照して
付けられるため、全角文字になっていたということですかね。
html の id 属性は、全角文字を認めておらず、JavaScript による TextBox の
取得は失敗する。と、そんな感じでしょうか。

>(ContorlToolKitの不具合と言っても良い気もしますが…)

クライアント側の処理に移る前、サーバー側において、検出してほしい部分ではあり
ますね。

解決済み
引用返信 編集キー/
■54634 / inTopicNo.7)  Re[6]: FormViewでAJAX Controlでエラー
□投稿者/ taco (4回)-(2010/10/28(Thu) 00:13:58)
No54545 (もりお さん) に返信

> FormView コントロールを自動的に構成する場合。
> FormView 内の TextBox の ID プロパティは、データベースのカラム名を参照して
> 付けられるため、全角文字になっていたということですかね。
> html の id 属性は、全角文字を認めておらず、JavaScript による TextBox の
> 取得は失敗する。と、そんな感じでしょうか。

はい、そう解釈しています。

全く動作しなければもう少し早く気付いたかもしれませんが、中途半端に動作する事も有るので
気付きませんでした。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -