使用 RedirectToAction 方法时视图内容不刷新

Posted

技术标签:

【中文标题】使用 RedirectToAction 方法时视图内容不刷新【英文标题】:The view content doesn't refresh when using RedirectToAction method 【发布时间】:2021-10-27 00:43:33 【问题描述】:

我创建了一个简单的 asp.net core mvc 项目。

HomeController.cs 如下所示:

public class HomeController : Controller

    public HomeController()
    
    

    public IActionResult Index(string name, string desc)
    
        Random random = new Random();
        TestViewModel viewModel = new TestViewModel();
        viewModel.Id = random.Next(0,7).ToString();
        viewModel.Name = name;
        viewModel.desc = desc;
        return View(viewModel);
    

    public IActionResult Update()
    
        //return View("Index", new TestViewModel()  Name="Steven", desc="Hello" );
        return RedirectToAction("Index", new  name = "Steven", desc="Hello" );
    

ViewModel 类:

public class TestViewModel

    public string Name  get; set; 
    public string Id  get; set; 
    public string desc  get; set; 

剃刀页面:

<!--
@
    ViewData["Title"] = "Home Page";

@model WebApplication6.Controllers.TestViewModel

<div class="main">
    <form method="get">
        <label name="id" asp-for="Id">@Model.Id</label>
        <label asp-for="Name">@Model.Name</label>
        <input name="desc" type="text" value="@Model.desc" />
        <input name="t1" type="button" onclick="executeInsert()"/>
    </form>
</div>

<script type="text/javascript">
    function executeInsert() 
        $.get('/Home/Update');
    
</script> -->

当我点击按钮时,我实际上已经发送了获取请求并且它已经重定向到索引操作,但是浏览器不会刷新视图内容。

【问题讨论】:

您在 ajax 中调用操作方法更新。即使服务器正在执行 RedirectToAction,ajax 也不会刷新页面或重定向。您可能想要使用提交按钮实际提交表单 请您试一试,让我知道这是否适合您。如果您在这方面需要任何进一步的帮助,请告诉我。 【参考方案1】:

这个函数不能这样调用$.get('/Home/Update'); 您可以通过这种方式更优雅地完成您想要实现的目标,您可以尝试以下示例:

控制器加载视图:

 public IActionResult Index(string name, string desc)
        
            Random random = new Random();
            TestViewModel viewModel = new TestViewModel();
            viewModel.Id = random.Next(0, 7).ToString();
            viewModel.Name = name;
            viewModel.desc = desc;
            return View(viewModel);
        

控制器提交新值:

        [HttpPost]
        public IActionResult Update(TestViewModel model)
        
          return RedirectToAction("Index", new  name = model.Name, desc = model.desc );
        

查看:

@model MVCApps.Models.TestViewModel

@
    ViewData["Title"] = "ViewContentTestIndex";


<h3>View Content Test Index</h3>
<hr />

@using (html.BeginForm("Update", "UserLog"))


    <div>
        Id: <label name="id" asp-for="Id">@Model.Id</label>
        Name:<label asp-for="Name">@Model.Name</label>
        Desc:<label asp-for="desc">@Model.desc</label>
    </div>

    <hr />
    <div>

        <label asp-for="Name">Name</label>
        <input name="Name" type="text" value="@Model.Name" />
        <label asp-for="Name">Desc</label>
        <input name="desc" type="text" value="@Model.desc" />
        <input id="Button" type="submit" value="Save" class="btn btn-primary" />
    </div>

   

输出:

希望对你有帮助。

【讨论】:

以上是关于使用 RedirectToAction 方法时视图内容不刷新的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core MVC RedirectToAction 不工作

ASP.NET MVC RedirectToAction 在从视图中发布 AJAX 后不起作用

使用 RedirectToAction 后会话变量为空

如何在 ASP.NET MVC 6 中继续使用 ModelState 和 RedirectToAction?

asp.net mvc 2 - 当 RedirectToAction 使用 JSON 数据时失去授权

RedirectToAction在控制器中工作,但不更新视图和URL