0

プロジェクト ID をクエリ文字列から ddb_projectList に渡して項目を選択し、GridView にデータを入力しようとしていますが、ページが読み込まれて最初の追加項目が選択されるときに問題が発生します。選択した値がまだ -1 であることに注意してください

誰でも問題を解決するのを助けることができますか


コード:

 public partial class TasksInProjects : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //get loged in user id UserID from MembershipUser 
            MembershipUser memberUser = Membership.GetUser();
            string StrUserID = memberUser.ProviderUserKey.ToString();
            Guid userID = Guid.Parse(StrUserID);
            hf_userID.Value = userID.ToString();

            if (Request.QueryString["projectID"] == null)
            {


                //ddl_projects.SelectedValue = Request.QueryString["projectID"];

                if (ddl_projects.SelectedValue != "-1")
                {

                    Guid projectID = Guid.Parse(ddl_projects.SelectedValue);
                    gv_TaskListForUser.DataSource = Task.GetTasksInProjectForUser(userID, projectID);
                    gv_TaskListForUser.DataBind();
                }

            }
            else
            {

                //ddl_projects.Visible = false;
                //Guid projectID = Guid.Parse(Request.QueryString["projectID"]);
                //gv_TaskListForUser.DataSource = Task.GetTasksInProjectForUser(userID, projectID);
                //gv_TaskListForUser.DataBind();

                ddl_projects.SelectedItem.Value = Request.QueryString["projectID"];
                Guid projectID = Guid.Parse(ddl_projects.SelectedItem.Value.ToString());
                gv_TaskListForUser.DataSource = Task.GetTasksInProjectForUser(userID, projectID);
                gv_TaskListForUser.DataBind();
            }
        }

    }
4

1 に答える 1

1

代わりにこれを試してください:

ddl_projects.ClearSelection();
ddl_projects.Items.FindByValue(Request.QueryString["projectID"]).Selected = true;

余談ですが

エラーの発生を防ぐために、これをまとめることをお勧めします。多くの場合、ユーザーは URL をいじってみます。したがって、彼らがいじる決心をした場合に備えて、できるだけ多くのチェックを行うことをお勧めします! 検証はすべて、達成しようとしている範囲に依存するため、単なる例ですが、私があなただった場合、少なくとも次を使用します。

int projectID = 0;

// Check the query string is an integer
if (int.TryParse(Request.QueryString["projectID"], out projectID))
{
    // You could apply addition checks here, such as check that the project id is valid etc.
    ListItem projectItem = ddl_projects.Items.FindByValue(projectID.ToString());

    // if there is a project item with that value in the drop down list
    if (projectItem != null)
    {
        ddl_projects.ClearSelection();
        projectItem.Selected = true;
    }
}
else
{
    // do something, e.g. display friendly error message or whatever else is required
}
于 2012-06-21T14:43:42.553 に答える