gpt4 book ai didi

c# - 如何检查页面是否作为提交表单或其他方式的结果显示

转载 作者:行者123 更新时间:2023-11-30 16:44:16 24 4
gpt4 key购买 nike

我有一个列表页面(索引),在网格中显示项目列表。该页面由顶部的小窗体和底部的网格(列表)组成。该表单用作过滤列表中显示的项目的方法。

我需要检查页面是否因提交表单(单击 2 个按钮中的任何一个)或通过单击其他页面的链接或直接在浏览器的地址栏中输入 URL 而显示。

View :

@model MyNameSpace.ViewModels.FooFilterViewModel

@{
ViewBag.Title = "Foo Listing";
Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>@ViewBag.Title</h2>

@using (Html.BeginForm("Index", "Home", FormMethod.Get))
{
@Html.ValidationSummary(true)

<!-- Field controls used for filtering go here -->

<input id="ClearFilter" type="button" value="Clear Filter" />
<input id="ApplyFilter" type="submit" value="Apply Filter" />
}

<!-- Grid displaying the list of foos goes here -->

Controller Action :

public ActionResult Index(FooFilterViewModel fooFilterViewModel)
{
// Retrieve all records
IQueryable<Foo> foos = _DBContext.Foos;

if (ModelState.IsValid)
{
if (/* check if coming from form submission */){
// Do something
}
else
{
// Do something else
}

// Code to filter records go here
foos = foss.Where(f => f...........)
}

fooFilterViewModel.Foos = foos;

return View(fooFilterViewModel);
}

最佳答案

由于您也以 GET 方式发送表单,因此从服务器的角度来看,所有这些方法(提交表单、点击链接、在地址栏中输入 URL)在功能上都是等效的。它们都只是对同一 URL 的 GET 请求。

如果您只需要区分表单提交,您可以添加一个隐藏字段或简单地命名您的提交按钮。无论哪种方式,您都可以检查此名称的 Request 对象,如果它存在,您可以假设表单已提交。

<button type="submit" name="FormSubmitted">Submit</button>

然后:

if (Request["FormSubmitted"] != null)
{
// form was submitted
}

但是,这很容易被伪造。例如,有人可以简单地输入 URL http://foo.com/?FormSubmitted,而您无法知道。我不确定在这种情况下恶意用户可能会担心多少,但您可以通过使您寻找的内容更加模糊来减轻这种情况,因此它不像“FormSubmitted”那样明显。或者,您可以使用 JavaScript 在表单中设置一些内容,然后将其埋入缩小的外部文件中。尽管如此,通过模糊实现的安全仍然不是安全。

但是,除此之外,没有办法说清楚。同样,所有这些方法对服务器来说看起来完全一样。为了区分方法,实际请求需要在某些方面有所不同,例如更改查询字符串,发送为 POST 而不是 GET 等。否则,如果是完全相同的请求,服务器不知道或关心它是如何产生的。

关于c# - 如何检查页面是否作为提交表单或其他方式的结果显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43786805/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com