【问题标题】:.Net Core 2.0 Razor Page handle button click data.Net Core 2.0 Razor 页面句柄按钮点击数据
【发布时间】:2018-10-08 06:58:39
【问题描述】:

对于 Razor Pages,当我希望用户单击表中的按钮,然后执行使用从行传递的元素进行操作的任务时,处理这种情况的最佳方法是什么?

到目前为止,我已经为这个表加载了一个数据模型,我希望他们单击​​一行并在我的操作中使用该行:

数据模型:

   public struct CollapseReportModel
{
    public HighLevelOutput Summary { get; set; }
    public IEnumerable<HighLevelOutput> WeeksOfData { get; set; }
}

表:

<div class="container">
    <div id="accordion">
        @{int counter = 0; }
        @foreach (var dataVM in Model.CollapseReport)
        {
            <div class="card">
                <div class="card-header" id="heading@(counter)">
                    <h5 class="mb-0">
                        <button class="btn btn-link" data-toggle="collapse" data-target="#collapse@(counter)" aria-expanded="true" aria-controls="collapse@(counter)">
                            @dataVM.ToString()

                        </button>
                    </h5>
                </div>

                <div id="collapse@(counter)" class="collapse" aria-labelledby="heading@(counter)" data-parent="#accordion">
                    <div class="card-body">

我正在尝试使用此按钮单击将数据发送到任务,但它只是传递空值:

                        <form method="post">
                            <input type="submit" class="btn btn-default" value="Add to Log" asp-page-handler="AddLog" asp-route-data="@dataVM.Summary.CorpCustomer, @dataVM.Summary.Item)" />
                        </form>

                        <ul class="list-group">
                            @foreach (var item in dataVM.WeeksOfData)
                            {
                                <li class="list-group-item">@($"{item.Item}, {item.ItemDescription}, {item.CorpCustomer}, {item.SummedOrder}, {item.SummedForecast}, {item.Difference}, {item.Week}")</li>
                            }
                        </ul>
                    </div>
                </div>
            </div>
            counter++;
        }
    </div>
</div>
<script src="~/jquery.js"></script>
<script src="~/bootstrap.js"></script>

到这个处理程序:

    public  Task<IActionResult> OnPostAddLog(string var1, string var2)
    {
        //Use elements from the row to perform an action
        var test = var1;
        var t2 = var2;

        return null;
    }

【问题讨论】:

    标签: c# asp.net-core-2.0 razor-pages


    【解决方案1】:

    只需将输入添加到您的表单中,它们就会发布到您的操作中。

    <form method="post">
        <input type="hidden" name="var1" value="@dataVM.WhateverProperty1" />
        <input type="hidden" name="var2" value="@dataVM.WhateverProperty2" />
        <input type="submit" class="btn btn-default" value="Add to Log" asp-page-handler="AddLog" asp-route-data="@dataVM.Summary.CorpCustomer, @dataVM.Summary.Item)" />
    </form>
    

    确保输入名称与操作中的参数名称相匹配。

    另外,使用[HttpPost] 装饰您的OnPostAddLog 方法,因为您的表单使用POST 方法。

    【讨论】:

    • 这是传递价值的诀窍,我是网络新手并正在学习 Razor,我在这里所做的是否是传递数据的好习惯?
    • 我对您的项目没有完整的了解,我很难告诉您您是否“正确”地做这件事,但至少它有效。如果您想了解基本原理并了解更传统的做法,请阅读this link
    • 好的,谢谢,还有一个问题 - 页面在帖子上刷新是典型的情况吗?
    • 这取决于你。同样,这取决于您想要实现的目标。有时您需要发布数据然后返回更新数据的同一页面,有时您需要重定向到另一个页面。没有典型。
    猜你喜欢
    • 2018-09-05
    • 1970-01-01
    • 1970-01-01
    • 2018-05-07
    • 2020-12-10
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    • 2020-12-21
    相关资源
    最近更新 更多