В экземпляре объекта не задана ссылка на объект. - PullRequest
2 голосов
/ 11 марта 2012

Мои коды ниже не содержат ошибок во время компиляции, но когда я открываю страницу, возникает ошибка в Guid currentUserId = (Guid)currentUser.ProviderUserKey;, заявляющая, что ссылка на объект не установлена ​​на экземпляр объекта.

foreach(DataRowView ProfileInfo in UserProfileDataSource.Select(DataSourceSelectArguments.Empty))
            {
              //Some codes where I display data from database
            }



protected void UserProfileDataSource_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
    {
        MembershipUser currentUser = Membership.GetUser();

        Guid currentUserId = (Guid)currentUser.ProviderUserKey;

        e.Command.Parameters["USERID"].Value = currentUserId;
    }

и вот мой источник SQLDataSource

<asp:SqlDataSource ID="UserProfileDataSource" runat="server" 
            ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
            onselecting="UserProfileDataSource_Selecting" 
            ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>"


            SelectCommand="SELECT &quot;TITLE&quot;, &quot;FAMILYNAME&quot;, &quot;GIVENNAME&quot;, &quot;MIDDLENAME&quot;, &quot;POSITION&quot;, &quot;INSTITUTIONNAME&quot;, &quot;USERID&quot;, &quot;REGISTEREDDATE&quot; FROM &quot;MEMBERINFO&quot; WHERE (&quot;USERID&quot; = ?)">
            <SelectParameters>
                <asp:Parameter Name="USERID" Type="Object" />
            </SelectParameters>
        </asp:SqlDataSource>

Эрни

Ответы [ 4 ]

4 голосов
/ 11 марта 2012

Вы должны убедиться, что currentUser не равен NULL, прежде чем пытаться получить к нему доступ:

if ( currentUser != null )
{
/* do stuff here */
}
else
{
/* do something else, like show an error message perhaps */
}
0 голосов
/ 12 февраля 2013

Проблема в плохом коде.Попробуйте выполнить следующие действия: - На своем веб-сайте установите «Начальную страницу» на правильную страницу «Вход».После того, как вы войдете в систему, правильно и затем попадете на страницу, вы сможете получить доступ к этому свойству.Вы можете столкнуться с той же ошибкой, если нажмете кнопку выхода из системы, и целевая страница может ссылаться на эту информацию о членстве.

Таким образом, обходной путь прост.1.Установите стартовую страницу правильно.2.Решите 2 случая: - пользователь вошел в систему, и пользователь не вошел в систему эффективно.пример приведен ниже: -

защищенный void Page_Load (отправитель объекта, EventArgs e) {

     if (Membership.GetUser() == null)
     { Label1.Text = "";
     Label_TotalCoxxxxxxxxx.Text = "";
     Label_TotalSuxxxxxxxxx.Text  ="";
     }
     else {
        string loggedinuser = Membership.GetUser().ToString();
        Label1.Text = loggedinuser;
        Label_TotalCoxxxxxxxxx.Text = "Total of xxxxxxxxxx Added in the current Month:-";
        Label_TotalSuxxxxxxxxx.Text = "Total of yyyyyyyyyy done in the current Month:-";
     }
}
0 голосов
/ 11 марта 2012

Вы, как представляется, разрешаете анонимным пользователям доступ к странице, для которой требуется зарегистрированный пользователь. Вы не можете получить пользователя, если он еще не вошел в систему.

Безопасность состоит из двух частей: авторизации и аутентификации. Аутентификация входит в систему, но авторизация запрещает доступ к страницам неавторизованным пользователям (например, тем, которые еще не вошли в систему или им не назначены правильные роли).

Если ваша страница зависит от аутентифицированного пользователя, вам следует запретить доступ анонимным пользователям. Если страница не зависит от аутентифицированного пользователя, а просто использует информацию об участнике, если они аутентифицированы, то вам нужно принять меры против вызова функций-членов (или всего, что использует данные члена), если пользователь не аутентифицирован.

0 голосов
/ 11 марта 2012

попробуйте этот код:

 string username =  HttpContext.Current.User.Identity.Name;

 if(!string.IsNullOrEmpty(username))
 {
 MembershipUser currentUser = Membership.GetUser(username);
 Guid currentUserId = new Guid(currentUser.ProviderUserKey.ToString());

 }
...