Redirect s pridanim #retezce

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
VaKvas
Začátečník | 111
+
0
-

Zdravim a prosim o radu:

po zpracovani formulare se potrebuji dostat na

$this->redirect('Documents:');

ale s tim, ze potrebuji mit na konci URL napriklad #tabs-9

lze to nejak poresit?

Pouzivam Ajaxove Tabs a potrebji se dostat na urcitou…

Diky !

Filip Procházka
Moderator | 4668
+
0
-
$this->redirect('Documents:#tabs-9');
VaKvas
Začátečník | 111
+
0
-

Nefunguje…

Nechybi me neco v routach?

$router[] = new Route('index.php', 'Front:Pages:');
$router[] = new Route('<presenter>');
$router[] = new Route('<presenter>/<action>');
VaKvas
Začátečník | 111
+
0
-

Tak mensi zmena:

treba zde to funguje:

function actionCatDelete($id) {
	if ($this->documentsModel->getDocuments()->where('category', $id)->count() >= 1) {
	    $this->flashMessage('Kategorie obsahuje dokumenty, nelze smazat');
	    $this->redirect('Documents:#tabs-9');
	}

ALE pokud mam treba toto:

function formDocSubmitted($form) {

	$values = $form->values;

	if($values['file']->getTemporaryFile()) {
	    $binarydata = file_get_contents($values['file']->getTemporaryFile());
	    $values['type'] = $values->file->getContentType();
	    $values['size'] = $values->file->getSize();
	    $values['binfile'] = $binarydata;
	    $values['name'] = $values->file->getName();
	}

	$values['by'] = $this->user->id;
	$values['inserted'] = new \DateTime();

	unset($values['file']);

	if ($this->action === 'docEdit') {
	    $this->documentsModel->updateDocuments($values, $this->getParam('id'));
	} else {
	    try {
		$this->documentsModel->addDocument($values);
	    } catch (\Exception $e) {
		$form->addError($e->getMessage());
		return;
	    }
	}

	$this->flashMessage('Dokument byl uložen');
	$this->redirect('Documents:#tabs-9');
    }

tak to nefunguje… a to mozna proto, ze vyuzivam setView.. je to mozne?

function renderDocEdit($id) {
	$this->setView('docEdit');
    }

    function renderDocAdd($id) {
	$this->setView('docAdd');
    }

jak by slo toto osetrit, prosim ?

Moc diky !

Editoval VaKvas (2. 5. 2011 13:48)

22
Člen | 1478
+
0
-

btw proč tam máš to setView? Přece stačí šablona s tím názvem.. Co znamená nefunguje, že se udělá redirect na Documents a v url není ten tab? Podívej se ve Firebugu, co se děje, jestli se ti to někde nepřesměrovává 2× třeba..

VaKvas
Začátečník | 111
+
0
-

Byl jsi rychlejsi… :-)

To setView jsem pouzil z nejakeho prikladu a uz jsem jej tam nechal… ani nevim na co tam je, kdyz tam template docAdd i docEdit mam.. u funguje, ale treba formular bez toho setView odeslat nejde (hodi 404)..

radsi poslu cely presenter, protoze tam nekde mozna bude nejaka blbost … :

<?php

namespace FrontModule;

use Nette\Application\Presenter, Nette, Nette\Application\AppForm,
 Nette\Forms\FormContainer, Nette\Database\Statement;

class DocumentsPresenter extends BasePresenter {

    public function startup() {
	parent::startup();

	if (!$this->getUser()->isAllowed('dokumenty', 'view')) {
	    $this->flashMessage('Neoprávněný přístup');
	    $this->redirect('Pages:');
	}
    }

    public function renderDefault() {

	//$this->user->roles[0];

	$this->template->docCat = $this->documentsModel->getDocumentsCat();
	$this->template->doc = $this->documentsModel->getDocuments();

	$this->template->registerHelper('icon', function ($typ) {
		    switch ($typ) {
			case 'image/jpeg' :
			    $icon = "<img align='left' src='images/icons/image.png'>";
			    break;
			case 'application/pdf' :
			    $icon = "<img align='left' src='images/icons/pdf.png'>";
			    break;
			case 'application/vnd.ms-excel' :
			    $icon = "<img align='left' src='images/icons/xls.png'>";
			    break;
			case 'application/msword' :
			    $icon = "<img align='left' src='images/icons/doc.png'>";
			    break;
			default :
			    $icon = "<img align='left' src='images/icons/file.png'>";
		    }

		    return "$icon";
		});
    }

    public function renderDoc($id) {
	$item = $this->documentsModel->getDocuments()->where('id', $id)->fetch();

	$contents = $item->binfile;

	$response = $this->getHttpResponse();
	$response->setContentType($item->type);
	$response->setHeader('Content-Disposition', 'attachment; filename="' . $item->name . '"');

	echo $contents;
	$this->terminate();
    }

    function createComponentDocCatForm() {
	$form = new AppForm;
	$form->addText('name', 'Název:')
		->setRequired('Vyplňte název !');
	$form->addSubmit('save', 'Uložit');
	$form->onSubmit[] = callback($this, 'formSubmitted');
	if ($this->action === 'catEdit') {
	    $docCategory = $this->documentsModel->getDocumentsCat()->where('id', $this->getParam('id'))->fetch();
	    if (!$docCategory) {
		throw new Nette\Application\BadRequestException;
	    }
	    $form->setDefaults($docCategory->toArray());
	}
	return $form;
    }

    function createComponentDocUploadForm() {
	$form = new AppForm;
	$form->addSelect('category', 'Kategorie', $this->documentsModel->getDocumentsCat()->fetchPairs('id', 'name'));

	if ($this->action === 'docEdit') {

	    $form->addFile('file', 'Soubor');
	    $form->addText('name', 'Název:')
		    ->setRequired('Vyplňte název !');

	    $doc = $this->documentsModel->getDocuments()->where('id', $this->getParam('id'))->fetch();
	    if (!$doc) {
		throw new Nette\Application\BadRequestException;
	    }
	    $form->setDefaults($doc->toArray());
	} else {


	    $form->addFile('file', 'Soubor')
		    ->setRequired('Zvolte soubor !');
	}

	$form->addText('desc', 'Popis:')->setAttribute('size', 50);
	$form->addSubmit('save', 'Uložit');
	$form->onSubmit[] = callback($this, 'formDocSubmitted');

	return $form;
    }

    function formSubmitted($form) {

	$values = $form->values;
	if ($this->action === 'catEdit') {
	    $this->documentsModel->updateDocumentsCat($values, $this->getParam('id'));
	} else {
	    try {
		$this->documentsModel->addDocumentsCat($values);
	    } catch (\Exception $e) {
		$form->addError($e->getMessage());
		return;
	    }
	}

	$this->flashMessage('Kategorie byla ulozena');
	$this->redirect('Documents:');
    }

    function formDocSubmitted($form) {

	$values = $form->values;

	if($values['file']->getTemporaryFile()) {
	    $binarydata = file_get_contents($values['file']->getTemporaryFile());
	    $values['type'] = $values->file->getContentType();
	    $values['size'] = $values->file->getSize();
	    $values['binfile'] = $binarydata;
	    $values['name'] = $values->file->getName();
	}

	$values['by'] = $this->user->id;
	$values['inserted'] = new \DateTime();

	unset($values['file']);

	if ($this->action === 'docEdit') {
	    $this->documentsModel->updateDocuments($values, $this->getParam('id'));
	} else {
	    try {
		$this->documentsModel->addDocument($values);
	    } catch (\Exception $e) {
		$form->addError($e->getMessage());
		return;
	    }
	}

	$this->flashMessage('Dokument byl uložen');
	$this->redirect('Documents:#tabs-9');
    }

    function actionCatDelete($id) {
	if ($this->documentsModel->getDocuments()->where('category', $id)->count() >= 1) {
	    $this->flashMessage('Kategorie obsahuje dokumenty, nelze smazat');
	    $this->redirect('Documents:#tabs-'.$id);
	}

	$this->documentsModel->getDocumentsCat()->where('id', $id)->delete();
	$this->flashMessage('Kategorie byla smazána');
	$this->redirect('Documents:');
    }

    function actionDocDelete($id) {
	$this->documentsModel->getDocuments()->where('id', $id)->delete();
	$this->flashMessage('Dokument byl smazán');
	$this->redirect('Documents:');
    }

    function renderCatEdit($id) {
	$this->setView('catEdit');
    }

    function renderCatAdd($id) {
	$this->setView('catAdd');
    }

    function renderDocEdit($id) {
	$this->setView('docEdit');
    }

    function renderDocAdd($id) {
	$this->setView('docAdd');
    }
}

?>
VaKvas
Začátečník | 111
+
0
-

Tak opet… v IE to generuje blbe a v Mozille dobre…
Nefunguje znamena, ze v linku po redirectu v IE vubec nevidim to $tabs-9 … ale v Mozille ano…

Nic mene, bych pozadal to objaseni, proc tam musim mit to setView… podotykam, ze jen po odeslani formulare to hodi 404 pokud tam ty metody render nejsou..

Diky !!!

22
Člen | 1478
+
0
-

nevim, co na to Laděnka nebo fireLogger?
btw komponentu by jsi měl přiřadit do stromu komponent:

protected function createComponentForm($name)
{
	$form = new AppForm($this, $name);
	...
}

a ve zpracování by jsi měl kontrolovat, jestli ti data přišly z formuláře

public function formSubmitted(AppForm $form)
{
	...
}

Editoval 22 (2. 5. 2011 14:58)

VaKvas
Začátečník | 111
+
0
-

Ze by byl problem v tom?

Nekde jsem cetl, ze je to proto, ze mam stejny form na editaci i na novy zaznam…

Jinak pokud zakomentuju ty rendery na konci tak:

Nette\Application\BadRequestException #404
a hodi to chybu tuto:

$doc = $this->documentsModel->getDocuments()->where('id', $this->getParam('id'))->fetch();
if (!$doc) {
throw new Nette\Application\BadRequestException; TUTO !!!!!
.....
22
Člen | 1478
+
0
-

tak to bude asi tím, že není proměnná $doc, protože se ti to asi nenaplní, protože se ti nepředá parametr v URL, kterej tam čteš..tak buď persistent nebo třeba

if (!$doc && !$this->getHttpRequest()->post) {
	...
}
VaKvas
Začátečník | 111
+
0
-

22 napsal(a):

nevim, co na to Laděnka nebo fireLogger?
btw komponentu by jsi měl přiřadit do stromu komponent:

protected function createComponentForm($name)
{
	$form = new AppForm($this, $name);
	...
}

a ve zpracování by jsi měl kontrolovat, jestli ti data přišly z formuláře

public function formSubmitted(AppForm $form)
{
	...
}

Co prosim teda jako udela toto, resp, jaky je rozdil v tom, co tam mam ja s timto…

Patrik Votoček
Člen | 2221
+
0
-

Rozdíl vpostatě žádný v jednom případě připojuješ komponentu až po nadefinování a ve druhém ještě před nadefinováním.

BTW jaký má význam:

VaKvas napsal(a):

<?php
class DocumentsPresenter extends BasePresenter {
    function renderCatEdit($id) {
	$this->setView('catEdit');
    }

    function renderCatAdd($id) {
	$this->setView('catAdd');
    }

    function renderDocEdit($id) {
	$this->setView('docEdit');
    }

    function renderDocAdd($id) {
	$this->setView('docAdd');
    }
}

?>
  1. je na přenastavení view ve view je pozdě!
  2. proč přenastavuješ aktivní view na stejné view?
VaKvas
Začátečník | 111
+
0
-

jen me bez toho nefungovalo odeslani toho formulare..
Vecer zkusim tu zmenu, co radi „22“ a verim ze to pak muzu dat pryc..

Ale nekdo me rikal, ze to musi byt, pokud mas stejny form pro new i edit…

Patrik Votoček
Člen | 2221
+
0
-

VaKvas napsal(a):

Ale nekdo me rikal, ze to musi byt, pokud mas stejny form pro new i edit…

bullshit

VaKvas
Začátečník | 111
+
0
-

Tak to zkousim…

pokud vkladam, tak to jde.. tzn, mluvim o kodu:

function createComponentDocCatForm($name) {
	$form = new AppForm($this, $name);
	$form->addText('name', 'Název:')
		->setRequired('Vyplňte název !');
	$form->addSubmit('save', 'Uložit');
	$form->onSubmit[] = callback($this, 'formSubmitted');
	if ($this->action === 'catEdit') {
	    $docCategory = $this->documentsModel->getDocumentsCat()->where('id', $this->getParam('id'))->fetch();
	    if (!$docCategory) {
		throw new Nette\Application\BadRequestException;
	    }
	    $form->setDefaults($docCategory->toArray());
	}
	return $form;
    }

    function formSubmitted(AppForm $form) {

	$values = $form->values;
	if ($this->action === 'catEdit') {
	    $this->documentsModel->updateDocumentsCat($values, $this->getParam('id'));
	} else {
	    try {
		$this->documentsModel->addDocumentsCat($values);
	    } catch (\Exception $e) {
		$form->addError($e->getMessage());
		return;
	    }
	}

ale pokud edituji, tedy akce catEdit, tak to hodi

if (!$docCategory) {
		throw new Nette\Application\BadRequestException;

tedy v pripade, ze odmazu

function renderCatEdit($id) {
$this->setView('catEdit');
}

function renderCatAdd($id) {
$this->setView('catAdd');
}

domnivam se, tedy aspon nevidim jiny rozdil, ze tam neposilam to $id…

Jak na to prosim?

Editoval VaKvas (2. 5. 2011 20:34)

VaKvas
Začátečník | 111
+
0
-

22 napsal(a):

tak to bude asi tím, že není proměnná $doc, protože se ti to asi nenaplní, protože se ti nepředá parametr v URL, kterej tam čteš..tak buď persistent nebo třeba

if (!$doc && !$this->getHttpRequest()->post) {
	...
}

toto take zkousim a zas me to hodi
Call to a member function toArray() on a non-object
na radce

$form->setDefaults($docCategory->toArray());

mam to nejak blbe poskladany.. asi.. kdyz uz jsme to nakousli, tak bych se rad toho setView zbavil :) pac nevim na co tam je ..

22
Člen | 1478
+
0
-

…protože asi máš tu proměnnou taky prázdnou a tedy v ní není určitě ani objekt a tedy nepůjde převést do pole. Ty prostě musíš nějak aplikaci ošetřit na to, že nemusí existovat v URL parametr id a nebo ho nějakým způsobem komponentě vždy zajistit. Navíc asi je zbytečné vykonávat dotaz v modelu, který asi je databázový, když tam předávaš id=NULL a vrátí nula záznamů, ušetříš minimálně dotaz. Jinak tu logiku naplnění dat dej aspoň mimo ten form, ne-li pryč z komponenty a udělat to až v render metodě třeba.

22
Člen | 1478
+
0
-

doporučuju kouknout na životní cyklus a používat Debugger::dump(), Debugger::barDump(), Debugger::fireLog().
Můžeš si do fireLoggeru poslat z jednotlivých části nějakou značku, aby ti bylo jasné, v jakém pořadí se presenter zpracovává.

VaKvas
Začátečník | 111
+
0
-

Tak $id jsem nastavil jako persistentni a jede to v pohode…

Ovsem ten problem s nepridani $#tab-x (jen v IE) je divny… (aspon pro me:-)
ALE TADY SE PRIDA jak v IE tak v Mozille

function actionCatDelete($id) {
	if ($this->documentsModel->getDocuments()->where('category', $id)->count() >= 1) {
	    $this->flashMessage('Kategorie obsahuje dokumenty, nelze smazat');
	    $this->redirect('Documents:#tabs-'.$id);
	}

	$this->documentsModel->getDocumentsCat()->where('id', $id)->delete();
	$this->flashMessage('Kategorie byla smazána');
	$this->redirect('Documents:');
    }

A TADY NE !

function formDocSubmitted($form) {

	$values = $form->values;

	if($values['file']->getTemporaryFile()) {
	    $binarydata = file_get_contents($values['file']->getTemporaryFile());
	    $values['type'] = $values->file->getContentType();
	    $values['size'] = $values->file->getSize();
	    $values['binfile'] = $binarydata;
	    $values['name'] = $values->file->getName();
	}

	$values['by'] = $this->user->id;
	$values['inserted'] = new \DateTime();

	unset($values['file']);

	if ($this->action === 'docEdit') {
	    $this->documentsModel->updateDocuments($values, $this->getParam('id'));
	} else {
	    try {
		$this->documentsModel->addDocument($values);
	    } catch (\Exception $e) {
		$form->addError($e->getMessage());
		return;
	    }
	}

	$this->flashMessage('Dokument byl uložen');
	$this->redirect('Documents:#tabs-'.$values->category);
    }

22 napsal(a):

Navíc asi je zbytečné vykonávat dotaz v modelu, který asi je databázový, když tam předávaš id=NULL a vrátí nula záznamů, ušetříš minimálně dotaz. Jinak tu logiku naplnění dat dej aspoň mimo ten form, ne-li pryč z komponenty a udělat to až v render metodě třeba.

Jak to ? vykonavam jej, abych naplnil ten form… nebo jsem zas mimo :-)
A priznam se, ze nevim, jak bych mel dat logiku jinam ci do render… Moc prosim… ukazal by jsi me to …

Ja jdu si du nekolikrat precist zivotnost aplikace :)

Diky za trpelivost !

22
Člen | 1478
+
0
-
  • dotaz do modelu – ano, pokud existuje vždy id tak pak je to v pořádku.
  • plnění v render metodě:
public renderNeco($id)
{
	$formData = .../něco pro získání dat
	$form = $this->getComponent('form');
	$form->setDefaults($formData);
	$this->template->form = $form;
}

Výhodou je, že komponenta je je nezávislá na Presenteru a jeho logice, takže ji můžeš příště použít i někde jinde…

  • s tím tabem nevím, zatím nevidím nic, proč by to nemělo fungovat, respektive nikdy jsem zatím nepoužíval, tak jestli s tím někdo dělal a poradí ti..zkus se podívat ve firebugu, kam se to vlastně redirectuje, jestli náhodou tam nemáš 2× ten redirect a jak ten link vypadá..
VaKvas
Začátečník | 111
+
0
-

A jak to pak zavolam?

To bude napriklad zde v podmince
if ($this->action === ‚catEdit‘) { .. } ?

Diky !

22
Člen | 1478
+
0
-

tak jestli dobře vidím, tak máš metodu renderCatEdit(), což je render k actionCatEdit(), tak ji podle mě snad nemusíš kontrolovat, ne? Provede se to přece jen tomto view.

VaKvas
Začátečník | 111
+
0
-

Takze budu muset pridat medotu actionCatEdit() a pak se vykona automaticky a nemusel bych ji testovat…

22
Člen | 1478
+
0
-

dej si do té render metody Debugger::dump($this->action) a bude ti to jasné :-)

22
Člen | 1478
+
0
-

jaká action se má provést, se přece zjistí z URL, která má zákl. tvar většinou presenter->action->id a máš to také definováné v routách, takže metoda action nemusí být vůbec uvedena a vykoná se rovnou render. stejně tak nemusíš uvádět ani render metody a vystačí ti úplně šablona v templatu příslušnýho presenteru.

VaKvas
Začátečník | 111
+
0
-

ahahaaa..

takze pouze odstranim to setView, co jsem tam mel a pridam naplneni formu ;)

VaKvas
Začátečník | 111
+
0
-

Tak ti nevim…

Muzes me prosim ukazat, jak by to melo byt na tomto kusu kodu :
Pokud bych pridal renderCatEdit() musel bych do toho dat cely form, protoze jinak ho nenaplnim.. Nehlede na fakt, ze pokud chci novou kategorii, volam take akci CatEdit ..

Ted jsem pekne zblbej , nebo blbej :-))

function createComponentDocCatForm() {
	$form = new AppForm;
	$form->addText('name', 'Název:')
		->setRequired('Vyplňte název !');
	$form->addSubmit('save', 'Uložit');
	$form->onSubmit[] = callback($this, 'formSubmitted');

	if ($this->action === 'catEdit') {
	    $docCategory = $this->documentsModel->getDocumentsCat()->where('id', $this->getParam('id'))->fetch();
	    if (!$docCategory) {
		throw new Nette\Application\BadRequestException;
	    }
	    $form->setDefaults($docCategory->toArray());
	}
	return $form;
    }

    function formSubmitted($form) {

	$values = $form->values;
	if ($this->action === 'catEdit') {
	    $this->documentsModel->updateDocumentsCat($values, $this->getParam('id'));
	} else {
	    try {
		$this->documentsModel->addDocumentsCat($values);
	    } catch (\Exception $e) {
		$form->addError($e->getMessage());
		return;
	    }
	}

	$this->flashMessage('Kategorie byla ulozena');
	$this->redirect('Documents:');
    }
22
Člen | 1478
+
0
-
function createComponentDocCatForm($name)
{
        $form = new AppForm($this, $name);
        $form->addText('name', 'Název:')
                ->setRequired('Vyplňte název !');
        $form->addSubmit('save', 'Uložit');
        $form['save']->onClick[] = callback($this, 'formSubmitted');
        return $form;
}

function formSubmitted(SubmitButton $form)
{
	$data = $form->form->values;
	...
}

public function renderCatEdit($id)
{
	$form = $this->getComponent('docCatForm');
	$data = $this->documentsModel->getDocumentsCat()->where('id', $id)->fetch();
	if($data) $form->setDefaults($data);
	...
}

nová kategorie by mělo být jiné view, tam asi žádný data plnit nepotřebuješ, takže ti stačí šablona, která odpovídá názvu toho linku, kterým to aktivuješ např.

Editoval 22 (3. 5. 2011 15:18)

VaKvas
Začátečník | 111
+
0
-

To vypada srozumitelne.. diky !!! vyzkousim

Jinak zkosim ruzne krokovat ten redirect s #tab-x a ne a ne na to prijit.

Je nejaky rozdil v tom, zda redirectuju v actionXXXX nebo function formSumited? Tady mam tu ukazku kodu

Po celou dobu krokovani vidim, ze jako code nebu url ci param se vyskytuje #tab-x, ale pak tam proste v IE neni…

Jestli ona nahodou Mozilla si to nekam necachuje a nedela cely refresh?

VaKvas
Začátečník | 111
+
0
-

Takze takto by to melo vypadat?
Funguje to, ale pro jistotu, jestli tam zas nemam neco zbytecne :-)

function createComponentDocCatForm($name) {
	$form = new AppForm($this, $name);
	$form->addText('name', 'Název:')
		->setRequired('Vyplňte název !');
	$form->addSubmit('save', 'Uložit');
	$form->onSubmit[] = callback($this, 'formSubmitted');
	return $form;
    }

    function formSubmitted($form) {

	$values = $form->values;
	if ($this->action === 'catEdit') {
	    $this->documentsModel->updateDocumentsCat($values, $this->getParam('id'));
	} else {
	    try {
		$this->documentsModel->addDocumentsCat($values);
	    } catch (\Exception $e) {
		$form->addError($e->getMessage());
		return;
	    }
	}

	$this->flashMessage('Kategorie byla ulozena');
	$this->redirect('Documents:#tabs-' . $this->getParam('id'));
    }

    function renderCatEdit($id) {
	$form = $this->getComponent('docCatForm');
        $data = $this->documentsModel->getDocumentsCat()->where('id', $id)->fetch();
        if($data) $form->setDefaults($data);
    }
VaKvas
Začátečník | 111
+
0
-

Jinak resim porad ty taby a napadlo me zkusit odeslat formulat jinak nez pres callbak()..
Pokud to ale zmenim, pise me to, ze formSubmitted is not callable…

Muze byt nejaky rozdil volani callbacku a treba funkce…

Chytam se jen toho, ze kdyz volam napr. actionDelete tak to jede dobre, ale pokud odesilam form, tak ne…

Jen takova uvaha a prosba o objasneni..

Diky !

EDIT: zjistil jsem, ze pokud mu predhodim jiny kod:
$this->redirect(300, ‚Documents:#tabs-‘ . $values->category);

tak sice hodi stranku o redirectu, ale posle i s potrebnym #tabs-xx..

Tedy IE evidentne vadi vychozi http kod 302 .. co s tim? napada vas neco?

Editoval VaKvas (4. 5. 2011 12:00)

22
Člen | 1478
+
0
-

Tak jsem se k tomu dneska nějak dostal a můžu potvrdit, že kotva se v IE ignoruje a nepřidá se do URL, pokud ji volám z nějaké submit metody přes:

$this->redirect('this#kotva');

netuším, jestli je to bug nebo se to má řešit jinak, ale co jsem koukal po foru, tak je to nějaký bug.

VaKvas
Začátečník | 111
+
0
-

Zkousel jsem ted i novy IE a taky nic…
Je to ale i tim, ze redirect tam soupne vychozi kod 302 (myslim), ale pokud mu podstrcim kod jiny, ktery vygeneruje mezistranku s odkazem, tak tam ta kotva je :)

Taky jsem cetl o bugu, nekde na foru o C#.

Diky

22
Člen | 1478
+
0
-

no, to je prostě IE, kašle na všechno, co je za hash znakem a neuloží to do historie. Asi by se to dalo obejít přes poslání nějakého parametru při redirectu a jeho odchycení a pak to odrolovat javascriptem asi nebo v horším pripade to ve startupu ještě jednou redirectnout?

VaKvas
Začátečník | 111
+
0
-

pokud to ale poslu do action, tak je to ok.. to jen ten submit…
Kdyby tam slo hodit nejaky error, jiny nez 302, ktery ale nevygeneruje mezistranku..

22
Člen | 1478
+
0
-

nevím, jak to obejít správně, chceto nějakýho odborníka!
Mně by se to taky hodilo po odeslání formu s chybou odrolovat na errory bez Javascriptu.

Editoval 22 (10. 5. 2011 11:35)

Yaromil
Backer | 20
+
0
-

Zdravím,

nyní jsem se se stejným problémem setkal i já, nepodařilo se to někomu již vyřešit? Co jsem prozatím vypozoroval, tak chyba se projevuje pouze v IE a u mě v případě pokud použiji redirect v komponentě, která je připojená k rodičovské komponentě.

Např.:

Presenter Articles
--- komponenta ArticleFrom
------ v callbacku formuláře pak

$this->parent->redirect('edit#images', $insertId);

Při tomto redirectu pod IE v URL zůstane i potřebné „#images“.

Naopak pokud je odeslán redirect z komponenty, která je připojená k rodičovké komponentě, tak se již potřebný parametr pod IE nepřenese.

Presenter Articles
---komponenta UploadImages
------komponenta UploadImageForm
--------- v callbacku pak

$this->parent->redirect('this#images');

(tady jsou zkoušel všechny možné variace jako např. redirect(‚Articles:edit#images‘, 9), ale nic nepomohlo)

Opakuji, že se to děje jen pod IE, jinde to funguje dobře.

Neví někdo čím by to mohlo být? Velice děkuji za každou radu.