我有一个页面,主要是信息数据(不是一个输入表单,整体)。它有一个标题,可以编辑。
单击Edit Title按钮将弹出一个模态窗口,用户可以在其中编辑标题并单击submit。
因为这个表单在页面中只占很小的一部分,而且我可能需要在同一页面上使用其他小表单,所以我在控制器中创建了一个小处理程序来处理这个提交。
[HttpPost]
public ActionResult PageTitle(string title)
{
// ... Save new title to the database ...
// I have no PageTitle page, so just redirect back to the source page
return RedirectToAction("Index");
}
这工作正常,但是我不喜欢这里额外的重定向。重定向回客户端会导致另一个返回服务器的往返过程。
有没有一种更有效的方法来处理页面上的小表单,在这种情况下,您不想每次都重新提交页面上的每个输入元素?
3条答案
按热度按时间8yparm6h1#
我不认为有一种方便的方法可以避免post请求后的重定向(不使用 AJAX )。
当然,您可以返回任何视图:
所以用户会得到相同的页面,但这种解决方案的问题是网址会不同。
你可以用一个函数来处理GET请求,用另一个函数来处理POST请求,两者都有相同的URL。但是你必须弄清楚一个动作方法如何处理更多的表单--可行但维护起来很糟糕。
如果这些表单可以出现在多个页面上,这可能会变得更加复杂。
但实际上,它解决了一个问题,通过重定向,可以避免用户按F5键时出现的re-POST对话框(有时会错误地再次提交表单)。
tzxcd3kk2#
正如@TiesonT.所指出的,post/redirect/get是一种标准模式。不,它看起来不是最有效的模式。但是如果不使用 AJAX 或更复杂的方法,就真的没有办法回发到一个专门的处理程序,然后在不使用重定向的情况下刷新页面。
希望我忽略了一些简单的东西,但看起来我没有。
l3zydbqr3#
通过 AJAX 发送表单数据怎么样,如下所示?
您还可以使用Partial Views以便在同一视图上使用多个表单或片段。