【发布时间】: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 看起来像:
在 FileUpload 操作中,我执行上传逻辑,为“索引”视图创建模型,在模型中设置一些值(例如上传状态消息)并返回 ViewResult:
[HttpPost]
public ActionResult FileUpload(HttpPostedFileBase articleFile)
{
IndexModel model = new IndexModel();
// file upload logic here
model.FileUploadMessage = "message";
return View("Index", model);
}
一切正常,文件已上传并显示消息,但浏览器中的 URL 更改为:
所以我的问题是:当返回带有动作名称 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