【问题标题】:Using asp-page TagHelper for form element action renders "" instead of correct URL使用 asp-page TagHelper 进行表单元素操作呈现“”而不是正确的 URL
【发布时间】:2021-04-14 12:58:06
【问题描述】:

我有一个显示搜索结果详细信息的剃须刀页面(即,单击搜索页面上的搜索结果链接会发布到详细信息页面)。详情页模型有四个从帖子写入的属性,用于回帖到搜索页:

[BindProperty]
public string PhysicianInput { get; set; }

[BindProperty]
public string LastNameInput { get; set; }

[BindProperty]
public string FirstNameInput { get; set; }

[BindProperty]
public int SelectedPhysician { get; set; }

为了消除任何其他问题,我从模型中删除了所有其他代码,除了自动生成文件时存在的空 OnGet 方法。

页面文件如下所示:

@page
@model Registrar.Pages.Followup.Physician.DetailModel
@{
    ViewData["Title"] = "Physician Detail";
}
<h1 class="page-title">Physician Detail</h1>
<div class="center" style="width:700px;">
    <form method="post" asp-page="/Followup/Physician/" id="PhysicianSearch">
        <div style="text-align:right;"><a href="/Followup/Physician" onclick="postBackToSearch();return false;">&laquo; Back to search results</a></div>
        <input type="hidden" name="PhysicianNumber" id="PhysicianNumber" value="@Model.PhysicianInput" />
        <input type="hidden" name="LastName" value="@Model.LastNameInput" />
        <input type="hidden" name="FirstName" id="FirstName" value="@Model.FirstNameInput" />
    </form>
        <p>
            Physician Number: @Model.PhysicianInput<br />
            Last Name: @Model.LastNameInput<br />
            First Name: @Model.FirstNameInput<br />
            Selected Physician Number: @Model.SelectedPhysician
        </p>

</div>
@section Scripts{
    <script src="/js/physician.js"></script>
}

那里的 js 文件是一个简单的函数,只需提交表单:

function postBackToSearch() {
    document.getElementById('PhysicianSearch').submit();
}

所以当我调试项目时,页面加载并且表单标签如下所示:

<form method="post" id="PhysicianSearch" action="">

操作元素留空。我搜索了高位和低位,但没有找到任何关于为什么 tagHelper 会将操作留空的指针。最重要的是,搜索页面本身使用相同的模式并且没有问题,asp-page tagHelper 按预期工作。

这是我第一个使用 asp.net core 5.0 的网站,虽然其中大部分内容都轻而易举,但我偶尔会遇到这种问题,而且由于框架没有给出任何关于问题可能的反馈调试几乎是不可能的。有谁知道这里发生了什么?

任何帮助将不胜感激。

【问题讨论】:

    标签: razor-pages asp.net-core-5.0


    【解决方案1】:

    好吧,为了回答我自己的问题,我找到了一种解决方法。而且真的很不满意。

    我依赖 asp-page tagHelper 填写表单操作的原因是,当我将表单操作直接添加到页面时,他们的防伪功能不喜欢它(以及我不明白的原因由于我对框架缺乏经验)。所以我的解决方案是让表单动作直接添加到页面中,也就是在接收后页面模型中禁用防伪功能。至少这很容易做到,我所做的只是在类的顶部添加这个属性:

    [IgnoreAntiforgeryToken(Order = 1001)]
    

    所以这是我的解决方案。搜索页面现在接受该帖子,但禁用其他有用的防伪功能非常不令人满意(就像我上面所说的那样)。但是,如果有人遇到这种情况并有更好的解决方案,请分享!

    【讨论】:

      猜你喜欢
      • 2018-09-28
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      • 2019-08-05
      • 1970-01-01
      • 2018-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多