asp.net 在一页上处理多个表单

1qczuiv0  于 2023-02-10  发布在  .NET
关注(0)|答案(3)|浏览(121)

我有一个页面,主要是信息数据(不是一个输入表单,整体)。它有一个标题,可以编辑。
单击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");
}

这工作正常,但是我不喜欢这里额外的重定向。重定向回客户端会导致另一个返回服务器的往返过程。
有没有一种更有效的方法来处理页面上的小表单,在这种情况下,您不想每次都重新提交页面上的每个输入元素?

8yparm6h

8yparm6h1#

我不认为有一种方便的方法可以避免post请求后的重定向(不使用 AJAX )。
当然,您可以返回任何视图:

public ActionResult Index()
{
    return View();
}

[HttpPost]
public ActionResult ProcessForm1(FormOneData data)
{
    // process form
    return View("Index");
}

[HttpPost]
public ActionResult ProcessForm2(FormTwoData data)
{
    // process form
    return View("Index");
}

所以用户会得到相同的页面,但这种解决方案的问题是网址会不同。
你可以用一个函数来处理GET请求,用另一个函数来处理POST请求,两者都有相同的URL。但是你必须弄清楚一个动作方法如何处理更多的表单--可行但维护起来很糟糕。
如果这些表单可以出现在多个页面上,这可能会变得更加复杂。
但实际上,它解决了一个问题,通过重定向,可以避免用户按F5键时出现的re-POST对话框(有时会错误地再次提交表单)。

tzxcd3kk

tzxcd3kk2#

正如@TiesonT.所指出的,post/redirect/get是一种标准模式。不,它看起来不是最有效的模式。但是如果不使用 AJAX 或更复杂的方法,就真的没有办法回发到一个专门的处理程序,然后在不使用重定向的情况下刷新页面。
希望我忽略了一些简单的东西,但看起来我没有。

l3zydbqr

l3zydbqr3#

通过 AJAX 发送表单数据怎么样,如下所示?

@model Models.YourModel

$('form').submit(function (event) {
    event.preventDefault();
 
    //Send the values of all form controls within the <form> tags including the token
    var formdata = $('#frmRegister').serialize();
 
    $.ajax({
        type: "POST",
        url: '@Url.Action("ProcessForm", "Controller")',
        cache: false,
        dataType: "json",
        data: formdata,
            
        error: function (response) {
            $("#error_message").html(data);
        },
 
        success: function (data, textStatus, XMLHttpRequest) {
            $('#result').html(data);
        }
    });
});

您还可以使用Partial Views以便在同一视图上使用多个表单或片段。

相关问题