我正在尝试在 IHP 中制作表单的多项选择部分。目前正在尝试在视图中使用多个类似这样的复选框来解决它。
renderIngredientSelection :: Ingredient -> Html
renderIngredientSelection ingredient = [hsx|
<li>
<input name="ingredients" type="checkbox" value={(get #name ingredient)} />{get #name ingredient}
</li>
|]
Run Code Online (Sandbox Code Playgroud)
所以网络日志的浏览器工具说它正在正确发送这样的请求。
barcode=5555555555555&name=Pancake&ingredients=milk&ingredients=egg
Run Code Online (Sandbox Code Playgroud)
但是在控制器中,该param函数只会捕获第一个ingredients参数。
有没有办法在控制器中捕获所有这些参数?我在网络日志中看到,创建了一个包含所有参数的元组列表,包括两个ingredients参数。我如何访问它并将其映射到一个列表中["milk", "egg"]?
我在 IHP 中找不到处理一般 404 页面的明显方法。
有没有一种简单的方法可以覆盖 FrontController 或 Router 中无效页面上的默认“未找到”路由?
为了测试 IHP,我已将Contoso University ASP.NET Core 教程的部分内容转换为 IHP。
\n本教程中的这一步显示了数据模型图。根据该页面,我在这个问题中重点关注的部分涉及Instructor和 ,OfficeAssignment其中 和 具有一对零或一的关系。
C# 中的模型Instructor是:
public class Instructor\n{\n public int ID { get; set; }\n\n [Required]\n [Display(Name = "Last Name")]\n [StringLength(50)]\n public string LastName { get; set; }\n\n [Required]\n [Column("FirstName")]\n [Display(Name = "First Name")]\n [StringLength(50)]\n public string FirstMidName { get; set; }\n\n [DataType(DataType.Date)]\n [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]\n [Display(Name = "Hire Date")]\n public DateTime …Run Code Online (Sandbox Code Playgroud) 我正在尝试将特定字符串导出为 csv 文件,并且希望用户能够下载该文件。IHP 具有 createTemporaryDownloadUrl 函数,该函数接收 StoredFile,然后创建临时下载链接。问题是,我不想将此 CSV 文件存储在服务器上,因为它需要额外的开销,例如在临时下载链接过期后删除该文件。
我可以使用 renderPlain 渲染文本变量,但我不完全确定如何自动化下载过程(因为用户必须右键单击,下载为,然后自己重命名文件)
我首先尝试通过存储文件来使用常规的 createTemporaryDownloadUrl 方法,但在临时下载 url 过期后没有简单的方法删除文件。我能够将 CSV 内容显示为纯文本文件,但没有明显的方法让用户下载它。
如果不是Nothing,我试图返回一个JSON数据表示,如果Nothing则返回一个空的JSON对象;
我知道我可以做到:
encode ()
-- "[]"
Run Code Online (Sandbox Code Playgroud)
但是现在我想要一个空对象 ( "{}")。
我有这个,它可以根据给定的字段生成 JSON:
? data Person = Person { id :: Integer, height :: Float } deriving (Show)
? instance ToJSON Person where toJSON (Person { id = id, height = height }) = object [ "id" .= id, "height" .= height ]
? encode (Person 1 72.8)
-- "{\"height\":72.8,\"id\":1}"
Run Code Online (Sandbox Code Playgroud)
但最终没有 Person 将用 Nothing 表示,如果我这样做,encode (Nothing)我会收到一个错误:
<interactive>:11:1: error:
• Ambiguous type variable ‘a0’ arising from a use of ‘encode’ …Run Code Online (Sandbox Code Playgroud) 我有一个带有由控制器动态生成的任意数量输入的表单的视图。提交表单时,每个输入都应创建自己的记录,因此,如果有 60 个输入,则应创建 60 条记录。
应如何验证每个输入/字段?在 IHP 文档的示例中,单个表单仅创建 1 条记录,因此我不确定执行此操作的最佳或惯用方法是什么。
也许我可以将如下所示的函数映射到每个提交的输入,但是 Left 情况将由第一个验证失败而不是所有验证失败触发,因此我需要在重定向到前一个之前将每个失败保存在列表中(?)表单视图。
action CreatePostAction = do
let post = newRecord @Post
post
|> fill @'["title", "body"]
|> validateField #title nonEmpty
|> validateField #body nonEmpty
|> ifValid \case
Left post -> render NewView { post }
Right post -> do
post <- post |> createRecord
setSuccessMessage "Post created"
redirectTo PostsAction
Run Code Online (Sandbox Code Playgroud)