我有一个剃刀页面,可以显示搜索结果的详细信息(也就是说,单击搜索页面上的搜索结果链接会发布到详细信息页面(。详细信息页面模型有四个属性,它们是从帖子中写入的,用于发布回搜索页面:
[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;">« 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页面tagHelper可以正常工作。
这是我第一个使用asp.net core 5.0的网站,虽然大部分都很轻松,但我每隔一段时间就会遇到这种问题,而且由于框架没有给出任何关于问题的反馈,所以几乎不可能进行调试。有人知道这里发生了什么吗?
任何帮助都将不胜感激。
好吧,为了回答我自己的问题,我找到了一个变通方法。这真的很不令人满意。
我之所以依赖asp页面tagHelper来填写我的表单操作,是因为当我将表单操作直接添加到页面时,他们的防目标功能不喜欢它(由于我对框架缺乏经验,我不理解(。因此,我的解决方案是允许表单操作直接添加到页面中,这意味着禁用接收后页面模型中的防目标功能。至少这很容易做到,我所做的就是在类的顶部添加这个属性:
[IgnoreAntiforgeryToken(Order = 1001)]
这就是我的解决方案。搜索页面现在接受了这篇帖子,但禁用有用的防雾功能非常不令人满意(就像我上面说的(。然而,如果有人遇到这种情况,并有更好的解决方案,请分享!