我是ASP.NETMVC的新手.我有一个索引页,从数据库中拉出3个随机值并显示它们.我在该页面上还有一个按钮,我想要随机化返回值并显示它们.我try 将按钮放入视图中

<a href='@Url.Action("randButton","Home")' class="btn btn-primary">Randomize</a>

这种方法非常接近给我想要的结果,但问题是,在生产中,当它重定向到randButton页面时,我能够刷新页面,所有随机代码都会再次触发.我想让它在按钮被点击时随机化,而不是在从浏览器刷新页面时随机化.

索引控制器:

    public IActionResult Index()
    {
        if (checkDate())
        {
            setSelections();
        }

        FetchData();
        return View(restaurants);
    }

    public IActionResult randButton()
    {
        resetSelections();
        setSelections();
        FetchData();
        return View("Index", restaurants);
    }

我还try 将返回值从index复制到RandButton.

如有需要,我很乐意提供进一步的信息.

推荐答案

如果我理解正确的话,问题似乎在于重新加载页面会重新调用randButton()操作.这可能是因为该操作的响应方式:

return View("Index", restaurants);

它返回一个视图,这意味着浏览器中的URL指向randButton()操作,这意味着重新加载页面将重新调用该操作.

将命令与查询分开.Index是一个查询(它不修改数据或状态,它只是显示它),randButton是一个命令(它修改数据或状态).

执行该命令后,发出重定向以执行查询:

return RedirectToAction("Index");

因此,当用户单击按钮时,他们调用命令,然后命令的结果是重定向响应,将他们导航回Index以查询当前状态.然后,如果他们重新加载页面,他们只是重新加载查询.

Csharp相关问答推荐

在C# 11之前, struct 中的每个字段都必须显式分配?不能繁殖

在C#中使用in修饰符

处理. netstandard2.0项目中HttpClient.SslProtocol的PlatformNotSupportedException问题""

我需要两个属性类吗

.NET HttpClient、JsonSerializer或误用的Stream中的内存泄漏?

如何忽略API JSON响应中的空字符串?

Appsettings.json未加载.Net 8 Blaazor Web程序集

C#-VS2022:全局使用和保存时的代码清理

NET8 MAUI并部署到真实设备上进行测试

C#中浮点数的System.Text.Json序列化问题

BFF到具有AAD/Entra ID B2C的内部API(.NET/ASP.NET核心/标识.Web)

为值对象编写自定义JsonConverter

无法使用[FromForm]发送带有图像和JSON的多部分请求

如何在.NET Maui中将事件与MVVM一起使用?

C#LINQ子字符串

这是否比决定是否使用ConfigureAWait(False)更好?

如何从非异步任务中正确返回TypeResult

基于C#方法的EF核心过滤查询(缓冲与流)

Cmd中的&ping.end()";有时会失败,而";ping";总是有效

Xamarin Forms应用程序中登录页面的用户名和密码编辑文本之间不需要的空格