【问题标题】:Keep URL unchanged after form submit表单提交后保持 URL 不变
【发布时间】:2015-04-23 07:05:22
【问题描述】:

我在默认“索引”视图上有文件上传表单,该视图从同一控制器(本例中为“管理员”)调用操作(“文件上传”):

@using (Html.BeginForm("FileUpload", "Admin", FormMethod.Post, htmlAttributes: new { enctype = "multipart/form-data" }))
        {

            <label for="articleFile" class="control-label">Upload article</label>
            <input id="articleFile" name="articleFile" type="file" accept=".txt" />
            <button type="submit">Upload</button>
        }

当我导航到这个视图 URL 看起来像:

http://mydomain/admin

在 FileUpload 操作中,我执行上传逻辑,为“索引”视图创建模型,在模型中设置一些值(例如上传状态消息)并返回 ViewResult:

 [HttpPost]
    public ActionResult FileUpload(HttpPostedFileBase articleFile)
    {
        IndexModel model = new IndexModel();

        // file upload logic here

        model.FileUploadMessage = "message";

        return View("Index", model);
    }

一切正常,文件已上传并显示消息,但浏览器中的 URL 更改为:

http://mydomain/admin/fileupload

所以我的问题是:当返回带有动作名称 Index 和模型的 ViewResult 时,是否有可能在表单提交完成后阻止它并使 URL 保持不变?

我知道我可以使用 jQuery 插件进行 ajax 异步文件上传或使用 RedirectToAction 作为结果,但是我无法传递模型,只能传递值。

【问题讨论】:

  • 谢谢,但我不认为这是同一个问题。建议使用在查询字符串中传递的 id 参数重定向到默认操作,以便可以从数据源检索更新的模型,因为模型无法传递给 RedirectToAction。我不想将模型传递给 RedirectToAction 我只是希望 URL 在表单提交后保持不变。
  • 我明白,但没有其他办法.. 1.) RedirectToAction with parameteres/tempdata/whatever, 2.) ajax, 3.) 将您的代码放入 Index action..一旦您发布到url,您必须重定向才能“以某种方式”离开那里。这就是http的工作原理。通过提交,您可以为该网址创建一个 http 帖子,因此如果您只是返回一个不同的网址(如果没有任何重定向),那将是非常奇怪的。
  • 是的,这是有道理的。我选择了选项 3,只是将操作从 FileUpload 重命名为 Index,因此我发布到相同的 URL。我现在有 2 个版本的索引操作 - 获取和发布 - 现在 URL 保持不变。感谢您的帮助!

标签: c# asp.net-mvc


【解决方案1】:

将您的页面重定向回索引是不错的选择

return RedirectToAction("Index", model);

因为关注Post/Redirect/Get 是一种很好的做法。

如果您选择在提交请求后刷新浏览器时不遵循此操作。您的请求将再次被发布,您可能会面临再次上传相同文件的问题或系统的任何遗漏行为。

【讨论】:

  • 我无法将模型传递给 RedirectToAction,只能传递 routeValues。
  • 没问题,我只是认为您有一些与 Index 方法相关的模型。我只是想将该重定向页面指向 Index 方法。如果您只是重定向到 Index 方法,则传递模型。
猜你喜欢
  • 1970-01-01
  • 2019-12-03
  • 1970-01-01
  • 2021-11-18
  • 2013-07-03
  • 2019-01-17
  • 1970-01-01
  • 1970-01-01
  • 2011-01-15
相关资源
最近更新 更多