【问题标题】:Passing along data from Razor Form Post to F# controller将数据从 Razor Form Post 传递到 F# 控制器
【发布时间】:2015-07-19 13:49:31
【问题描述】:

如何在 F# MVC5 Web 应用程序中使用 Razor 传递数据。

例如,在下面的视图中,当 PostEmail 表单发布时,我如何传递 newEmail 输入的值以及来自 的一些字段查看数据

对于 DeleteEmail 表单,如何从 emails 选择中获取选定的选项值?

我的观点:(Settings.cshtml)

<div style="width: 100%;">
    <h2 id="title" style="margin: 0 auto;">@ViewBag.PageTitle</h2> <br> <br>
    <div style="width: 60%; margin: 0 auto;">
        <div style="float: left; clear: none; width: 45%;">
            <span>EMAILS</span> <br>

            @using (Html.BeginForm("DeleteEmail", "QualityScore", FormMethod.Post))
            {
                <select id="emails" size="10" style="width: 100%; max-width: 100%">
                    @foreach (string email in ViewBag.EmailList)
                    {
                        <option value="@email">@email</option>
                    }
                </select>
                <input type="submit" id=" email_delete" value="Delete" />
            }

            @using (Html.BeginForm("PostEmail", "QualityScore", FormMethod.Post))
            {
                <input id="newEmail" />
                <input type="submit" id="email_create" value="Create" />
            }

        </div>
    </div>
</div>

我的控制器:(QualityScoreController.fs)

type QualityScoreController(queries : DataQueries) =
    inherit Controller()
    new () = new QualityScoreController(DataQueries())

    member this.Settings(token) = 
        let db = DataConnection.GetDataContext()

        let user = queries.FindUserByToken(token, db)

        this.ViewData.Add("PageTitle", "Your QualityScore Report Settings")
        this.ViewData.Add("EmailList", queries.FindUsersReportEmails(user.Id, db))
        this.ViewData.Add("KeywordList", queries.FindUsersReportBrands(user.Id, db))
        this.ViewData.Add("UserID", user.Id)

        this.View()

    member this.PostEmail() =
        ... //need to use information sent from the form

    member this.DeleteEmail() =
        ... //need to use information sent from the form

我的解决方案

我的观点:(Settings.cshtml)

<div style="width: 100%;">
    <h2 id="title" style="margin: 0 auto;">@ViewBag.PageTitle</h2> <br> <br>
    <div style="width: 60%; margin: 0 auto;">
        <div style="float: left; clear: none; width: 45%;">
            <span>EMAILS</span> <br>

            @using (Html.BeginForm("DeleteEmail", "QualityScore", FormMethod.Post))
            {
                <select name="emails" size="10" style="width: 100%; max-width: 100%">
                    @foreach (string email in ViewBag.EmailList)
                    {
                        <option value="@email">@email</option>
                    }
                </select>
                <input type="submit" id=" email_delete" value="Delete" />
                <input name="userid" none value="@ViewBag.UserID" />
            }

            @using (Html.BeginForm("PostEmail", "QualityScore", FormMethod.Post))
            {
                <input name="newEmail" />
                <input type="submit" id="email_create" value="Create" />
                <input name="userid" none value="@ViewBag.UserID" />
            }

        </div>
    </div>
</div>

我的控制器:(QualityScoreController.fs)

type QualityScoreController(queries : DataQueries) =
    inherit Controller()
    new () = new QualityScoreController(DataQueries())

    member this.Settings(token) = 
        let db = DataConnection.GetDataContext()

        let user = queries.FindUserByToken(token, db)

        this.ViewData.Add("PageTitle", "Your QualityScore Report Settings")
        this.ViewData.Add("EmailList", queries.FindUsersReportEmails(user.Id, db))
        this.ViewData.Add("KeywordList", queries.FindUsersReportBrands(user.Id, db))
        this.ViewData.Add("UserID", user.Id)

        this.View()

    member this.PostEmail(newEmail: string,  userid : int) =
        ...

    member this.DeleteEmail(emails : string,  userid : int) =
        ...

【问题讨论】:

    标签: asp.net-mvc razor f# asp.net-mvc-5


    【解决方案1】:

    ASP.NET MVC 将自动将表单值绑定到您的操作的同名参数:

    member this.PostEmail( newEmail: string ) = ...

    【讨论】:

    • 那是因为您为表单元素指定了id 而不是name
    • 非常感谢您清除了它。现在 ViewBag 中的项目有可能吗?
    • 您必须将它们添加为表单上的隐藏字段。
    猜你喜欢
    • 2014-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    • 2016-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多