首页 > 解决方案 > redirectTo 有效,但不会更改 IHP 中的 URL

问题描述

语境

我有 2 个控制器:

按照生成的控制器代码,在LessonsController rendersShowLessonActionShowView

ShowView,我有一个链接到一个动作QuizAnswersController

<a href={CheckQuizAnswerAction (get #id answer)}>Check Answer</a>

CheckQuizAnswerAction检查答案是否正确,然后ShowLessonAction使用成功消息重定向到:

action CheckQuizAnswerAction { quizAnswerId } = do
    quizAnswer <- fetch quizAnswerId
    quiz <- fetch (get #quizId quizAnswer)
    let lessonId = get #lessonId quiz

    case (get #correct quizAnswer) of
        True -> setSuccessMessage "Correct!" >> redirectTo ShowLessonAction { lessonId }
        False -> setSuccessMessage "Try again" >> redirectTo ShowLessonAction { lessonId  }

问题

一切正常,但我注意到在CheckQuizAnswerAction调用之后,URL 是:

/CheckQuizAnswer?quizAnswerId=123...

代替:

/ShowLesson?lessonId=123...

是怎么回事使这个工作与不同的 URL?

标签: haskellihp

解决方案


由于您的操作会产生副作用,因此最好在此处使用表单:

<form method="POST" action={CheckQuizAnswerAction (get #id answer)}>
    <button type="submit" class="btn btn-link">Check Answer</button>
</form>

使用它而不是<a href={CheckQuizAnswerAction (get #id answer)}>Check Answer</a>可能已经解决了问题:)


推荐阅读