1

Default.aspx と Upload.aspx があります。クエリ文字列を介して Id をdefault.aspx( like:http://localhost:3081/default.aspx?Id=1752) に渡しています。デフォルトのページには、upload.aspx を開いてファイルをアップロードするためのリンク ボタンがありますRequest.QueryString["Id"]。オブジェクトのインスタンス".RadControls を扱っています。リンク( )をクリックしたときに開くには、次のOnClientClick="return ShowAddFeedBackForm()"ようなコードがあります。

<script>
function ShowAddFeedBackForm() {
            window.radopen("Upload.aspx", "UserListDialog");
           return false;
    }
</script>

テキストボックスとファイルアップロードコントロールを備えたアップロードページで詳細ビューを使用しています。

upload.aspx でのファイルのアップロード時にバインドするコード

protected void DetailsView1_ItemInserting(object sender, DetailsViewInsertEventArgs e)
{
string qString = Request.QueryString["Id"].ToString();
       if (DetailsView1.CurrentMode == DetailsViewMode.Insert)
       {

           //string qString = Request.QueryString["Id"].ToString();
           //int Projectid = Convert.ToInt32(Session["ProjectId"]);
           ProTrakEntities objEntity = new ProTrakEntities();
           TextBox txtTitle = DetailsView1.FindControl("txtTask") as TextBox;
           //RadComboBox cmbStatus = DetailsView1.FindControl("cmbStatus") as RadComboBox;
           //var id = (from project in objEntity.Projects where project.ProjectId == Projectid select project).First();
           RadComboBox cmbTaskType = DetailsView1.FindControl("cmbTasktype") as RadComboBox;
           //RadComboBox cmbTaskPriorty = DetailsView1.FindControl("cmbPriority") as RadComboBox;

           string Description = (DetailsView1.FindControl("RadEditor1") as RadEditor).Content;



           var guid = (from g in objEntity.Projects where g.ProjectGuid == qString select g).First();
           int pID = Convert.ToInt32(guid.ProjectId);

           ProjectFeedback objResource = new ProjectFeedback();
           objResource.ProjectId = pID;
           objResource.Subject = txtTitle.Text;
           objResource.Body = Description;
           objResource.CreatedDate = Convert.ToDateTime(System.DateTime.Now.ToShortDateString());
           objResource.FeedbackType = cmbTaskType.SelectedItem.Text;
           objEntity.AddToProjectFeedbacks(objResource);
           objEntity.SaveChanges();

           DetailsView1.ChangeMode(DetailsViewMode.ReadOnly);
           ClientScript.RegisterStartupScript(Page.GetType(), "mykey", "CloseAndRebind('navigateToInserted');", true);


       }

}

クエリ文字列ステートメントでエラーが発生する - 「オブジェクト参照がオブジェクトのインスタンスに設定されていません」

4

5 に答える 5

3

新しいページを開くと、クエリ文字列は継承されません。URL に ID を含める必要がありますUpload.aspx?id=1752

編集:

簡単な解決策は、ページ URL の検索部分をコピーすることです。

window.radopen("Upload.aspx" + document.location.search, "UserListDialog");

ただし、通常は、サーバー側のコードでクエリ文字列から取得した id 値を使用し、それを使用するクライアント コードを生成します。

于 2011-08-24T13:49:05.847 に答える
0

よくわかりませんが、推測する必要がある場合は、ページのスクリプトセクションでradopenを呼び出したときにウィンドウオブジェクトがインスタンス化されているかどうかを疑問視します。window.radopen()呼び出しの前にmsgboxを配置して、ウィンドウオブジェクトの内容を出力する必要があります。nullの場合は問題です。そうでない場合は、さらに掘り下げる必要があります。ちょうど私の2セント。

于 2011-08-24T13:49:28.373 に答える
0

また、GUIDクエリが結果を返さない場合、.First()を呼び出すとこのエラーも発生することにも注意しました。問題を調査しているときに確認するもう1つの場所。

于 2011-08-24T13:55:46.190 に答える
0

最後に、objEntities の構築に失敗して null 参照が返された場合にこのエラーがスローされる可能性がある場所が 1 つあります。オブジェクトのプロパティを呼び出すと、このエラーが生成されます (つまり、objEntitiey.Projects)。

 ProTrakEntities objEntity = new ProTrakEntities();  
 var guid = (from g in objEntity.Projects where g.ProjectGuid == qString select g).First();            
于 2011-08-24T13:59:41.460 に答える
0

他の回答者が言ったように、RadWindow はそれを呼び出したページについて何も知らないため、ID を RadWindow に渡す必要があるため、このエラーが発生しています。ウィンドウがクエリ文字列を見つけることができないため、null 参照例外が発生しているため、.ToString() を参照しようとすると例外がスローされます。

動作させるには、Javascript 関数を次のようにします。

function ShowAddFeedBackForm(Id) {
    window.radopen(String.format("Upload.aspx?Id={0}", Id), "UserListDialog");
    return false;
}

基本ページ (ウィンドウを開くページ) の分離コード Page_Load イベントに、次のように記述します。

if (!IsPostBack)
    Button.OnClientClick = string.Format("javascript:return ShowAddFeedBackForm({0});", Request.QueryString["Id"]);

もちろん、Buttonページ上のボタンの ID にする必要があります。

于 2011-08-24T14:04:55.023 に答える