使用 Razor Pages 禁用按钮

问题描述 投票:0回答:1

我有一个通过 Razor Pages 构建的表单。该表单由两个提交按钮组成 - 每个按钮都分配给适当的

asp-page-handler
,如下所示:

@page "{id:int}"
//...
<form asp-action="Post">
    <input type="submit" asp-page-handler="Approve" class="btn btn-success" value="Approve" />
    <input type="submit" asp-page-handler="Decline" class="btn btn-danger" value="Decline" />
</form>

我的处理程序工作正常。现在我需要根据某种条件禁用“批准”按钮。不幸的是,我不知道使用 Razor Pages 实现此目的的正确方法是什么?

我尝试了以下方法(条件已简化):

@{ var disableTag = "disabled"; } 
...
<input type="submit" asp-page-handler="Approve" class="btn btn-success" value="Approve"  @disableTag />

应用程序启动后,标记保持不变,按钮仍然启用。似乎

asp-page-handler
标签强制 Razor 引擎忽略
@disableTag
变量。

下一次尝试是(

@disableTag
被放在
asp-page-handler
前面):

<input type="submit" @disableTag asp-page-handler="Approve" class="btn btn-success" value="Approve" /

现在页面渲染正确(

disabled
标签在那里),但处理程序本身停止工作(标记将
asp-page-handler="Approve"
显示为普通标签,而不是像
/{PageName}/{id}?handler=Approve
之类的东西)

我在这里做错了什么?

asp.net-core razor razor-pages
1个回答
14
投票

尝试以标签助手的方式思考。禁用是一个您可以定义的属性,就像等效标记帮助器支持的所有其他属性一样。您可以在下面找到两种不同的方法来定义按钮的禁用属性:

@{
    bool disable1 = true;
    string disable2 = "disable";    // or string disable2 = null;
}

<h2>Test</h2>
<form asp-action="Post">
    <input type="submit" asp-page-handler="Approve" class="btn btn-success" value="Approve" disabled="@(disable1 ? "disabled" : null)" />
    <input type="submit" asp-page-handler="Decline" class="btn btn-danger" value="Decline" disabled="@disable2" />
</form>

希望有帮助。

完整示例

DisabledButton.cshtml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace MyWebApplication.Pages
{
    public class DisabledButtonModel : PageModel
    {
        public bool Disbale1 { get; set; }
        public bool Disbale2 { get; set; }

        public void OnGet()
        {

        }

        public ActionResult OnPostApprove()
        {
            Disbale1 = true;
            Disbale2 = false;

            return Page();
        }

        public ActionResult OnPostDecline()
        {
            Disbale1 = false;
            Disbale2 = true;

            return Page();
        }
    }
}

DisabledButton.cshtml

@page "{handler?}"
@model MyWebApplication.Pages.DisabledButtonModel

<form asp-action="Post">
    <input type="submit" asp-page-handler="Approve" class="btn btn-success" value="Approve" disabled="@(Model.Disbale1 ? "disabled" : null)" />
    <input type="submit" asp-page-handler="Decline" class="btn btn-danger" value="Decline" disabled="@(Model.Disbale2 ? "disabled" : null)" />
</form>
© www.soinside.com 2019 - 2024. All rights reserved.