【问题标题】:Disable a button using razor pages使用剃须刀页面禁用按钮
【发布时间】:2018-07-17 17:50:18
【问题描述】:

我有一个通过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 标签强制剃须刀引擎忽略@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 这样的标记)

我在这里做错了什么?

【问题讨论】:

  • 条件可以通过以下方式在您的cshtml 文件中使用。 &lt;form asp-action="Post"&gt; @if(some condition){ &lt;input type="submit" asp-page-handler="Approve" class="btn btn-success" value="Approve" disabled/&gt; } @else{ &lt;input type="submit" asp-page-handler="Decline" class="btn btn-danger" value="Decline" /&gt; } &lt;/form&gt;我希望它能回答你的问题
  • 谢谢,这应该适用于最简单的情况。但它似乎并不优雅

标签: asp.net razor razor-pages


【解决方案1】:

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

@{
    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>

【讨论】:

  • 澄清:如果前面没有 asp-page-handler 属性,我确实可以工作,这里就是这种情况
  • 我添加了一个完整的例子。它之所以有效,是因为我对其进行了测试。
  • 谢谢,这解决了问题。但是我仍然不清楚为什么标记助手会像这样@(Model.ApproveAllowed ? "disabled" : null) 那样破坏内联语句。希望能从这里得到答案:docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/…
  • 很好的解决方案,euxaristo!
猜你喜欢
  • 2021-08-31
  • 2020-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-15
  • 2020-11-06
  • 1970-01-01
  • 2019-01-11
相关资源
最近更新 更多