Перенаправление в MainPage......

Вдогонку к теме (раз уж с URL разделов разобрались)
https://community.terrasoft.ru/forum/topic/9805
возник такой вопрос: как мне направить пользователя на конкретный URL?
Понятно, что надо что то дописать в MainPage.PageLoadComplete, но вопрос что и куда, чтобы всё не упало.......

Нравится

12 комментариев

И в ответ тишина........
Никто не пробовал что ли?
И мыслей нет?
Мне интересно через
HtmlWindow.Open из System.Windows.Forms стоит пробовать или сразу забыть?

И еще такой вопрос: так как надо перенаправлять пользователя не всегда, а только после того как он вошел в систему (после "чистого" логина) как мне узнать с какого URL пришел пользователь?
Через HttpContext доставать?

Здравствуйте. По поводу вопроса в шапке:
http://msdn.microsoft.com/en-us/library/t9dwyts4.aspx

А по поводу второго вопроса, мне кажется проще дописать в сессию пользователя какой-то флаг, и от него уже "плясать".
Что-то вроде:

public void Redirect()
    {
       HttpSessionState session = HttpContext.Current.Session;
        if (session["redirect"] == null) {
            session.Add("redirect", 1);
            HttpContext.Current.Response.Redirect(url);             
    }

"Олейник Дмитрий" написал:

Здравствуйте. По поводу вопроса в шапке:

http://msdn.microsoft.com/en-us/library/t9dwyts4.aspx

С уважением,

Олейник Дмитрий

Эксперт 3-й линии поддержки


Ларчик просто открывался :-)

"Олейник Дмитрий" написал:
проще дописать в сессию пользователя какой-то флаг

с этого момента поподробнее, не понял

а, пардон, понял. Но все равно не понял :-)
Этот Redirect в MainPage получается вставлять?.....

Александр, да.

Спасибо, попробую.

Все получилось. :smile:

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

Метод такой вышел:

void RedirectToDepartmentHomeModule(Guid ContactId) {
 
Guid DepartmentId = Guid.Empty;
string HomeURL = "";
 
var session = HttpContext.Current.Session;
 
if (session["redirect"] == null) {
	session.Add("redirect", 1);
 
	Select selectDepartmentId = new Select(UserConnection).
			Column("DepartmentId").
				From("Contact").
					Where(Column.Const(ContactId.ToString())).IsEqual("Id")
		as Select;			
 
	using (var dbExecutor = UserConnection.EnsureDBConnection()) {
		using (IDataReader dr = selectDepartmentId.ExecuteReader(dbExecutor)) {
			if (dr.Read()) {
				DepartmentId = UserConnection.DBTypeConverter.DBValueToGuid(dr[0]);
			}			
		}
	}
 
	Select selectHomeURL = new Select(UserConnection).
			Column("HomeURL").
				From("DepartmentHomeModule").
					Where(Column.Const(DepartmentId.ToString())).IsEqual("DepartmentId")
		as Select;			
 
	using (var dbExecutor = UserConnection.EnsureDBConnection()) {
		using (IDataReader dr = selectHomeURL.ExecuteReader(dbExecutor)) {
			if (dr.Read()) {
				HomeURL = dr[0].ToString();
			}			
		}
	}
 
	if (!String.IsNullOrWhiteSpace(HomeURL)) {
		HttpContext.Current.Response.Redirect( HomeURL );
	}
}
}

P.S. Одного не пойму: какого лешего столь простую (как оказывается) функциональность нельзя было реализовать сразу в поставке? Задача стандартная до ужаса..... ну да ладно......

Ну, как вариант, часть кода с запросом можно унифицировать: создать свой класс в SourceScheme и реализовать общий метод. Что-то вроде

public string executeSelect(string columnName, string tableName, string recordId, string filterColumnName)
{
var result;
Select selectDepartmentId = new Select(UserConnection).
                        Column(columnName).
                                From(tableName).
                                        Where(Column.Const(recordId)).IsEqual(filterColumnName)
                as Select;                      
 
        using (var dbExecutor = UserConnection.EnsureDBConnection()) {
                using (IDataReader dr = selectDepartmentId.ExecuteReader(dbExecutor)) {
                        if (dr.Read()) {
                                result= UserConnection.DBTypeConverter.DBValueToGuid(dr[0]);
                        }                       
                }
        }
        return result.ToString();
}

и тогда все будет красивее:

void RedirectToDepartmentHomeModule(Guid ContactId) {
 
Guid DepartmentId = Guid.Empty;
string HomeURL = "";
 
var session = HttpContext.Current.Session;
 
if (session["redirect"] == null) {
        session.Add("redirect", 1);
        string res = executeSelect("DepartmentId", "Contact", ContactId.ToString(), "Id");
        string res2 = executeSelect("HomeURL", "DepartmentHomeModule", res , "DepartmentId");
 
 
        if (!String.IsNullOrWhiteSpace(res2)) {
                HttpContext.Current.Response.Redirect( res2);
        }
}
}

Согласен. Вообще эту конструкция много где пользуется, надо так и сделать.

Показать все комментарии